Auteur Sujet: Teensy 3.1, 3.2 - Sonorisation locomotive  (Lu 145129 fois)

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1713
    • Voir le profil
Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« Réponse #75 le: janvier 24, 2018, 12:24:29 pm »
5V tolérant c'est pour les entrées. Ça signifie que bien que le MCU soit alimenté en 3,3V il tolère que le niveau haut d'un signal numérique appliqué sur une entrée puisse atteindre 5V. Mais en aucun cas il ne peut être alimenté au delà de 3,3V (nominal)
« Modifié: janvier 27, 2018, 09:13:40 am par Jean-Luc »
Cordialement

Benoit92

  • Full Member
  • ***
  • Messages: 200
    • Voir le profil
Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« Réponse #76 le: janvier 26, 2018, 08:15:46 pm »
En attendant de recevoir les mémoires Flash (W25Q64B/mémoire FLASH module/SPI Interface), je me pose quelques questions.
1) Comment charger la mémoire ?
A travers le Teensy ou avec un support avec interface USB type :
https://www.ebay.fr/itm/EZP2013-USB-Programmer-SPI-24-25-93-EEPROM-Flash-Bios-Chip-Software-Socket/131816395066?hash=item1eb0de913a:g:esoAAOSw9VZXOY62

2) Concernant les fichiers (*.wav convertit avec "wav2trw_16" en *.raw), j'ai vu dans des exemples que l’adresse du début du fichier  ? ou la taille du fichier? est indiqué (0xF8A00) par exemple :
#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <NmraDcc.h>
#include <Servo.h>
//#include <SD.h>
//#include <Bounce.h>
#include <play_serialflash.h>

//16 Bit RAW - Converted with wav2trw -16
const unsigned int AudioSampleStandby = 0xF8A00;          //TBD Length - AudioSampleStandby.raw
const unsigned int AudioSampleSteam = 0;                  //TBD Length - AudioSampleSteam.raw
const unsigned int AudioSampleCompressor = 0xD0B00;       //TBD Length - AudioSampleCompressor.raw
const unsigned int AudioSampleAirRelease =  0xDCD00;      //TBD Length - AudioSampleAirRelease.raw
const unsigned int AudioSampleBell = 0x9500;              //TBD Length - AudioSampleBell.raw
const unsigned int AudioSampleWhistle = 0xE2100;          //TBD Length - AudioSampleWhistle.raw
const unsigned int AudioSampleShoveling = 0xE2100;        //TBD Length - AudioSampleShoveling.raw

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1713
    • Voir le profil
Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« Réponse #77 le: janvier 27, 2018, 09:21:53 am »
1) ça peut se faire avec le Teensy. Regarde cet example de SerialFlash https://github.com/PaulStoffregen/SerialFlash/blob/master/examples/CopyFromSerial/CopyFromSerial.ino il y a un script python qui discute avec la Teensy via la ligne série et lui envoie le fichier : https://github.com/PaulStoffregen/SerialFlash/tree/master/extras

2) Je ne sais pas il faudrait regarder où ces constantes sont utilisées mais des deux c’est plus probablement la taille
Cordialement

Benoit92

  • Full Member
  • ***
  • Messages: 200
    • Voir le profil
Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« Réponse #78 le: janvier 28, 2018, 12:18:18 am »
Si je comprends bien, j'installe en premier rawfile-uploader.py sur le teensy  (https://github.com/PaulStoffregen/SerialFlash/blob/master/extras/rawfile-uploader.py), mais, je ne sais pas :

1) dans quelle répertoire du PC mettre mes fichiers *.raw (après conversion avec "wav2trw_16").

2) sous quelle forme, ces fichiers sont enregistrés dans la flash ?

3) quel est le mécanisme qui évite d'écraser les données dans la flash ?

3) pour lire la Flash, le nom du fichier est suffisant ou il faut spécifier des tailles ou des adresse de début de fichier)

J'ai essayé de regarder sur certains sites (dont ceux de PaulStoffregen), mais cela ne me parait pas très clair.

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1713
    • Voir le profil
Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« Réponse #79 le: janvier 28, 2018, 10:14:52 am »
Non pas du tout.

Sur le Teensy le sketch CopyFromSerial doit être chargé. Ce sketch reçoit les données à mettre dans la flash de l’USB/série et les écrit dans la flash. Note qu’il efface la flash avant.

Sur ton PC, tu lances via l’invite de commande rawfile_uploader.py. Ce script python prend au moins 2 arguments, le premier est le port série où est connecté le Teensy et le second le fichier à envoyer ; on peut mettre plusieurs fichiers. Le script envoie donc les fichiers au sketch qui les écrit dans la flash. Note que le nom des fichiers est limité à 8 caractères plus 3 caractères d’extension. Il faut également mettre à la ligne 29 la taille de la flash en M octets (8 pour la flash en question)

1) où tu veux, le mieux est d’y mettre aussi le script et de travailler ensuite dans ce répertoire.

2) binaire, juste les octets qui constituent le son.

3) la bibliothèque SerialFlash gère un système de fichiers rudimentaire.

4) la bibliothèque gère un catalogue, donc le nom de fichier suffit. Regarde les exemples. Regarde également le script python.
Cordialement

Benoit92

  • Full Member
  • ***
  • Messages: 200
    • Voir le profil
Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« Réponse #80 le: janvier 28, 2018, 06:50:04 pm »
Merci beaucoup pour ta patience !

Benoit92

  • Full Member
  • ***
  • Messages: 200
    • Voir le profil
Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« Réponse #81 le: mars 11, 2018, 12:42:36 am »
Bonjour,
J'ai reçu les mémoires Spi Flash.
D'après ce que j'ai compris, je dois charger le fichier "son" brut depuis le PC (ASUS550C - Windows10) dans la Spi Flash (25Q64BVSIG)

Connexion Mémoire <-> teensy 3.2
    Memory <-> Teensy connection
    WP/IO2......................none
    DO/IO1 (MISO).......... pin 12
    HOLD/IO3...................3,3 V
    DI/IO0 (MOSI).............pin7
    CS............................pin6
    CLK...........................pin14
    VCC..........................3,3 V

    CopyFromSerial.ino
J'utilise l'option : sans audio board:
    /*
 * This is free and unencumbered software released into the public domain.
 *
 * Anyone is free to copy, modify, publish, use, compile, sell, or
 * distribute this software, either in source code form or as a compiled
 * binary, for any purpose, commercial or non-commercial, and by any
 * means.
 *
 * In jurisdictions that recognize copyright laws, the author or authors
 * of this software dedicate any and all copyright interest in the
 * software to the public domain. We make this dedication for the benefit
 * of the public at large and to the detriment of our heirs and
 * successors. We intend this dedication to be an overt act of
 * relinquishment in perpetuity of all present and future rights to this
 * software under copyright law.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 * OTHER DEALINGS IN THE SOFTWARE.
 *
 * For more information, please refer to <http://unlicense.org>
 * -------------------------------------------------------------------------
 *
 * This is example code to 1) format an SPI Flash chip, and 2) copy raw
 * audio files (mono channel, 16 bit signed, 44100Hz) to it using the
 * SerialFlash library.  The audio can then be played back using the
 * AudioPlaySerialflashRaw object in the Teensy Audio library.
 *
 * To convert a .wav file to the proper .RAW format, use sox:
 * sox input.wav -r 44100 -b 16 --norm -e signed-integer -t raw OUTPUT.RAW remix 1,2
 *
 * Note that the OUTPUT.RAW filename must be all caps and contain only the following
 * characters: A-Z, 0-9, comma, period, colon, dash, underscore.  (The SerialFlash
 * library converts filenames to caps, so to avoid confusion we just enforce it here).
 *
 * It is a little difficult to see what is happening; aswe are using the Serial port
 * to upload files, we can't just throw out debug information.  Instead, we use the LED
 * (pin 13) to convey state.
 *
 * While the chip is being formatted, the LED (pin 13) will toggle at 1Hz rate.  When
 * the formatting is done, it flashes quickly (10Hz) for one second, then stays on
 * solid.  When nothing has been received for 3 seconds, the upload is assumed to be
 * completed, and the light goes off.
 *
 * Use the 'rawfile-uploader.py' python script (included in the extras folder) to upload
 * the files.  You can start the script as soon as the Teensy is turned on, and the
 * USB serial upload will just buffer and wait until the flash is formatted.
 *
 * This code was written by Wyatt Olson <wyatt@digitalcave.ca> (originally as part
 * of Drum Master http://drummaster.digitalcave.ca and later modified into a
 * standalone sample).
 *
 * Enjoy!
 */
// SPI Flash 25Q64BVSIG
#include <SerialFlash.h>
#include <SPI.h>

//Buffer sizes
#define USB_BUFFER_SIZE      128 // 128
#define FLASH_BUFFER_SIZE    4096

//Max filename length (8.3 plus a null char terminator)
#define FILENAME_STRING_SIZE      13

//State machine
#define STATE_START      0
#define STATE_SIZE      1
#define STATE_CONTENT    2

//Special bytes in the communication protocol
#define BYTE_START      0x7e
#define BYTE_ESCAPE      0x7d
#define BYTE_SEPARATOR    0x7c

//SPI Pins (these are the values on the Audio board; change them if you have different ones)
//#define MOSI               7
//#define MISO              12
//#define SCK               14
#define CSPIN              6
//#define CSPIN           21  // Arduino 101 built-in SPI Flash

void setup(){
  Serial.begin(9600);  //Teensy serial is always at full USB speed and buffered... the baud rate here is required but ignored


  pinMode(13, OUTPUT);
   
//  Set up SPI Teensy without audio Card
  SPI.setMOSI(7);  // uncomment these if using the alternate pins
  SPI.setMISO(12);
  SPI.setSCK(14);

  if (!SerialFlash.begin(CSPIN)) {
    while (1) {
      Serial.println("Unable to access SPI Flash chip");
      delay(1000);
    }
  }
  //We start by formatting the flash...
  uint8_t id[5];
  SerialFlash.readID(id);
  SerialFlash.eraseAll();
 
  //Flash LED at 1Hz while formatting
  while (!SerialFlash.ready()) {
    delay(500);
    digitalWrite(13, HIGH);
    delay(500);
    digitalWrite(13, LOW);
  }

  //Quickly flash LED a few times when completed, then leave the light on solid
  for(uint8_t i = 0; i < 10; i++){
    delay(100);
    digitalWrite(13, HIGH);
    delay(100);
    digitalWrite(13, LOW);
  }
  digitalWrite(13, HIGH);
 
  //We are now going to wait for the upload program
//  while(!Serial.available());

  SerialFlashFile flashFile;
 
  uint8_t state = STATE_START;
  uint8_t escape = 0;
  uint8_t fileSizeIndex = 0;
  uint32_t fileSize = 0;
  char filename[FILENAME_STRING_SIZE];
 
  char usbBuffer[USB_BUFFER_SIZE];
  uint8_t flashBuffer[FLASH_BUFFER_SIZE];
 
  uint16_t flashBufferIndex = 0;
  uint8_t filenameIndex = 0;
 
  uint32_t lastReceiveTime = millis();
 
  //We assume the serial receive part is finished when we have not received something for 3 seconds
  while(Serial.available() || lastReceiveTime + 3000 > millis()){//3000
    uint16_t available = Serial.readBytes(usbBuffer, USB_BUFFER_SIZE);
    if (available){
      lastReceiveTime = millis();
    }

    for (uint16_t usbBufferIndex = 0; usbBufferIndex < available; usbBufferIndex++){
      uint8_t b = usbBuffer[usbBufferIndex];
     
      if (state == STATE_START){
        //Start byte.  Repeat start is fine.
        if (b == BYTE_START){
          for (uint8_t i = 0; i < FILENAME_STRING_SIZE; i++){
            filename[i] = 0x00;
          }
          filenameIndex = 0;
        }
        //Valid characters are A-Z, 0-9, comma, period, colon, dash, underscore
        else if ((b >= 'A' && b <= 'Z') || (b >= '0' && b <= '9') || b == '.' || b == ',' || b == ':' || b == '-' || b == '_'){
          filename[filenameIndex++] = b;
          if (filenameIndex >= FILENAME_STRING_SIZE){
            //Error name too long
            flushError();
            return;
          }
        }
        //Filename end character
        else if (b == BYTE_SEPARATOR){
          if (filenameIndex == 0){
            //Error empty filename
            flushError();
            return;
          }
         
          //Change state
          state = STATE_SIZE;
          fileSizeIndex = 0;
          fileSize = 0;
         
        }
        //Invalid character
        else {
          //Error bad filename
          flushError();
          return;
        }
      }
      //We read 4 bytes as a uint32_t for file size
      else if (state == STATE_SIZE){
        if (fileSizeIndex < 4){
          fileSize = (fileSize << 8) + b;
          fileSizeIndex++;
        }
        else if (b == BYTE_SEPARATOR){
          state = STATE_CONTENT;
          flashBufferIndex = 0;
          escape = 0;
         
          if (SerialFlash.exists(filename)){
            SerialFlash.remove(filename);  //It doesn't reclaim the space, but it does let you create a new file with the same name.
          }
         
          //Create a new file and open it for writing
          if (SerialFlash.create(filename, fileSize)) {
            flashFile = SerialFlash.open(filename);
            if (!flashFile) {
              //Error flash file open
              flushError();
              return;
            }
          }
          else {
            //Error flash create (no room left?)
            flushError();
            return;
          }
        }
        else {
          //Error invalid length requested
          flushError();
          return;
        }
      }
      else if (state == STATE_CONTENT){
        //Previous byte was escaped; unescape and add to buffer
        if (escape){
          escape = 0;
          flashBuffer[flashBufferIndex++] = b ^ 0x20;
        }
        //Escape the next byte
        else if (b == BYTE_ESCAPE){
          //Serial.println("esc");
          escape = 1;
        }
        //End of file
        else if (b == BYTE_START){
          //Serial.println("End of file");
          state = STATE_START;
          flashFile.write(flashBuffer, flashBufferIndex);
          flashFile.close();
          flashBufferIndex = 0;
        }
        //Normal byte; add to buffer
        else {
          flashBuffer[flashBufferIndex++] = b;
        }
       
        //The buffer is filled; write to SD card
//        if (flashBufferIndex >= FLASH_BUFFER_SIZE){
//          flashFile.write(flashBuffer, FLASH_BUFFER_SIZE);
//          flashBufferIndex = 0;
//        }
      }
    }
  }

  //Success!  Turn the light off.
  digitalWrite(13, LOW);
}

void loop(){
  //Do nothing.
}

void flushError(){
  uint32_t lastReceiveTime = millis();
  char usbBuffer[USB_BUFFER_SIZE];
  //We assume the serial receive part is finished when we have not received something for 3 seconds
  while(Serial.available() || lastReceiveTime + 3000 > millis()){
    if (Serial.readBytes(usbBuffer, USB_BUFFER_SIZE)){
      lastReceiveTime = millis();
    }
  }
}


    Raw-uploader.py (Python 2.7)
  #!/usr/bin/python
#
# Uploads raw audio files to Teensy + Audio board with SPI Flash on board.  To use this program, first
# load the 'CopyFromSerial' example sketch.  When it first runs, it will format the SPI flash chip
# (this may take a long time for larger chips; a 128MB chip that I am using can take almost 10 minutes,
# but smaller 16MB ones should be faster).
#
# While the chip is being formatted, the LED (pin 13) will toggle at 1Hz rate.  When the formatting is
# done, it flashes quickly (10Hz) for one second, then stays on solid.  When nothing has been received
# for 3 seconds, the upload is assumed to be completed, and the light goes off.
#
# You can start this program immediately upon plugging in the Teensy.  It will buffer and wait until
# the Teensy starts to read the serial data from USB.
#
###################

import serial, sys, os, time

if (len(sys.argv) <= 2):
print("Usage: '" + sys.argv[0] + " <port> <files>' where:\n\t<port> is the TTY USB port connected to Drum Master\n\t<files> is a list of .RAW files (bash globs work).")
sys.exit()

#Special bytes
BYTE_START = "\x7e"
BYTE_ESCAPE = "\x7d"
BYTE_SEPARATOR = "\x7c"

#Flash size (in MB).  Change this to match how much space you have on your chip.
FLASH_SIZE = 16

totalFileSize = 0;
for i, filename in enumerate(sys.argv):
if (i >= 2):
totalFileSize = totalFileSize + os.path.getsize(filename)

flashSizeBytes = FLASH_SIZE * 1024 * 1024
if (totalFileSize > flashSizeBytes):
print("Too many files selsected.\n\tTotal flash size:\t" + "{:>14,}".format(flashSizeBytes) + " bytes\n\tTotal file size:\t" + "{:>14,}".format(totalFileSize) + " bytes")
sys.exit()

ser = serial.Serial(sys.argv[1])
print("Uploading " + str(len(sys.argv) - 2) + " files...")
for i, filename in enumerate(sys.argv):
if (i >= 2):
startTime = time.time();
sys.stdout.write(str(i - 1) + ": ")
sys.stdout.write(filename)
sys.stdout.flush()


f = open(filename, "rb")
fileLength = os.path.getsize(filename)
try:
encoded = []
#Start byte
encoded.append(BYTE_START)
#Filename
for byte in os.path.basename(filename):
encoded.append(byte)
#End of filename
encoded.append(BYTE_SEPARATOR)

#File length (uint32_t)
encoded.append(chr((fileLength >> 24) & 0xFF));
encoded.append(chr((fileLength >> 16) & 0xFF));
encoded.append(chr((fileLength >> 8) & 0xFF));
encoded.append(chr((fileLength >> 0) & 0xFF));
encoded.append(BYTE_SEPARATOR)

#Binary data, with escaping
for byte in f.read():
if byte == BYTE_START or byte == BYTE_ESCAPE:
encoded.append(BYTE_ESCAPE)
encoded.append(chr(ord(byte) ^ 0x20))
else:
encoded.append(byte);

#Write end of data byte
encoded.append(BYTE_START)
ser.write("".join(encoded))

finally:
f.close()

endTime = time.time();
print(" (" + str(round(fileLength / 1024 / (endTime - startTime), 2)) + " KB/s)");

print("All files uploaded")

Ecran de commande Windows 
 Sur l'écran de commande Windows, je récupère les messages d'erreurs suivant :
    C:\Python27>python "rawfile-uploader.py" "com4" "AABR99.trw"
    Uploading 1 files...
    1: AABR99.trwTraceback (most recent call last):
    File "rawfile-uploader.py", line 80, in <module>
    ser.write("".join(encoded))
    File "C:\Python27\lib\site-packages\serial\serialwin32.py", line 295, in write
    raise writeTimeoutError
    serial.serialutil.SerialTimeoutException: Write timeout


Teensy 
 Sur le teensy, la LED 13 clignote à 1Hz rate.
 
Je ne sais pas comment résoudre ce problème.


Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1713
    • Voir le profil
Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« Réponse #82 le: mars 11, 2018, 09:30:33 am »
Il y d’entrée de jeu quelque chose que je ne comprends pas. Sur le Teensy PJRC s’est attaché à garder des numéros de broches compatibles avec l’Arduino. Par conséquent le SPI est sur les mêmes broches que sur un Uno : 10 (cs), 11 (mosi), 12 (miso) et 13 (sck). Pourquoi ce ne sont pas ces broches qui sont employées?
Cordialement

Benoit92

  • Full Member
  • ***
  • Messages: 200
    • Voir le profil
Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« Réponse #83 le: mars 11, 2018, 10:07:07 am »
Tu as raison, mais, j'ai utilisé les pins qui sont déclarées dans le sketch CopyFromSerial (que j'ai réutilisé):
//SPI Pins (these are the values on the Audio board; change them if you have different ones)
[code]//SPI Pins (these are the values on the Audio board; change them if you have different ones)
//#define MOSI               7
//#define MISO              12
//#define SCK               14
#define CSPIN              6
//#define CSPIN           21  // Arduino 101 built-in SPI Flash

void setup(){
  Serial.begin(9600);  //Teensy serial is always at full USB speed and buffered... the baud rate here is required but ignored


  pinMode(13, OUTPUT);
   
//  Set up SPI Teensy without audio Card
  SPI.setMOSI(7);  // uncomment these if using the alternate pins
  SPI.setMISO(12);
  SPI.setSCK(14);

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1713
    • Voir le profil
Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« Réponse #84 le: mars 11, 2018, 10:17:37 am »
Avant d'essayer CopyFromSerial, je commencerais par bricoler avec la flash et le Teensy seuls. Voir si j'arrive à l'effacer, créer des fichiers, les relire. Une fois que c'est validé, je passerais à la suite.

Si la LED reste à clignoter à 1Hz, ça signifie que la flash n'est pas prête après le formattage.
Cordialement

Benoit92

  • Full Member
  • ***
  • Messages: 200
    • Voir le profil
Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« Réponse #85 le: mars 12, 2018, 01:09:17 pm »
1) J'ai branché la SPI Flash de la façon suivante :
Vu de la Spi Flash
MISO DO/I01   -> 12
MOSI DI/I00 -> 11
CS -> 10
CLK -> 13    14 ?

2) J'ai lancé : Raw SerialFlash Hardware Test
Résultat dans le moniteur série :
Read Chip Identification:
  JEDEC ID:     EF 40 17
  Part Nummber: W25Q64FV
  Memory Size:  8388608 bytes
  Block Size:   65536 bytes

Reading Chip...

Writing 4096 signatures

Double Checking All Signatures:
  all 4096 signatures read ok

Checking Signature Pairs
  all 2047 signature pairs read ok

Checking Read-While-Write (Program Suspend)
  write 256 bytes at 256
  write time was 663 microseconds.
  read-while-writing: 00 00 00 00 15 F5 95 4B
  test passed, good read while writing

Checking Read-While-Erase (Erase Suspend)
  erase time was 105892 microseconds.
  erase correctly erased 65536 bytes
  read-while-erasing: 00 00 00 00 15 F5 95 4B
  test passed, good read while erasing

All Tests Passed  :-)

Test data was written to your chip.  You must run
EraseEverything before using this chip for files.

Mais, j'ai toujours le timeout sur l'écran de commande Windows lorsque je lance le script Python :rawfile-uploader.py
(rawfile-uploader.py permet d'envoyer un fichier "son" depuis le PC vers le Teensy via la liaison COM4 (USB Teensy).

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1713
    • Voir le profil
Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« Réponse #86 le: mars 12, 2018, 01:36:41 pm »
COM4 est pas ouvert par une autre application, genre le terminal de l'IDE Arduino ?
Cordialement

Benoit92

  • Full Member
  • ***
  • Messages: 200
    • Voir le profil
Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« Réponse #87 le: mars 12, 2018, 10:14:32 pm »
1) J'ai essayé de fermer le port COM4 en fermant l'IDE Arduino.
J'ai le résultat suivant sur l'écran de commande Windows :
C:\Python27>python "rawfile-uploader.py" "com4" "AABR99.trw"
Uploading 1 files...
1: AABR99.trwTraceback (most recent call last):
  File "rawfile-uploader.py", line 80, in <module>
    ser.write("".join(encoded))
  File "C:\Python27\lib\site-packages\serial\serialwin32.py", line 289, in write
    raise SerialException("WriteFile failed (%r)" % ctypes.WinError())
serial.serialutil.SerialException: WriteFile failed (WindowsError(22, 'Le p\xe9riph\xe9rique ne reconna\xeet pas la commande.'))

2) le Raw SerialFlash Hardware Test ne fonctionne que si le "SCK" de la Flash est sur la pin 13 du teensy (alors que dans CopyFrom Serial, il y a l'affectation suivante :
  SPI.setSCK(14);La pin 13 permet également de piloter la LED ?????
  pinMode(13, OUTPUT);
..................
 //Flash LED at 1Hz while formatting
  while (!SerialFlash.ready()) {
    delay(500);
    digitalWrite(13, HIGH);
    delay(500);
    digitalWrite(13, LOW);
  }

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1713
    • Voir le profil
Re : Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« Réponse #88 le: mars 13, 2018, 08:46:14 am »
1) J'ai essayé de fermer le port COM4 en fermant l'IDE Arduino.
J'ai le résultat suivant sur l'écran de commande Windows :
C:\Python27>python "rawfile-uploader.py" "com4" "AABR99.trw"
Uploading 1 files...
1: AABR99.trwTraceback (most recent call last):
  File "rawfile-uploader.py", line 80, in <module>
    ser.write("".join(encoded))
  File "C:\Python27\lib\site-packages\serial\serialwin32.py", line 289, in write
    raise SerialException("WriteFile failed (%r)" % ctypes.WinError())
serial.serialutil.SerialException: WriteFile failed (WindowsError(22, 'Le p\xe9riph\xe9rique ne reconna\xeet pas la commande.'))

Ca fait penser à un problème sur le PC. Je ne pourrai pas t’en dire plus, je n’utilise pas Windows.

Citer
2) le Raw SerialFlash Hardware Test ne fonctionne que si le "SCK" de la Flash est sur la pin 13 du teensy (alors que dans CopyFrom Serial, il y a l'affectation suivante :
  SPI.setSCK(14);La pin 13 permet également de piloter la LED ?????
  pinMode(13, OUTPUT);
..................
 //Flash LED at 1Hz while formatting
  while (!SerialFlash.ready()) {
    delay(500);
    digitalWrite(13, HIGH);
    delay(500);
    digitalWrite(13, LOW);
  }

Tant que le chip select n'est pas actif, on peut faire ce que l’on veut sur SCK, MOSI et MISO.
Cordialement

Benoit92

  • Full Member
  • ***
  • Messages: 200
    • Voir le profil
Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« Réponse #89 le: mars 14, 2018, 12:06:22 am »
Sur la spécification de Teensy 3.2, on a effectivement :
CS --> pin 10 au lieu de 6 ?
DOUT (MOSI)--> pin 11
DIN (MISO)--> pin 12
SCK --> pin 13
 
Je ne sais pas si le script "rawfine-uploader.py" est compatible avec Python 2 ou Python 3 ?