Transfert de données PC <-> ESP32 S3 (non UART)

Bonjour
J'aimerais simplement pouvoir communiquer entre le PC et l'ESP32 S3 (dev board avec 2 prises USB-C), mais par la prise USB de gauche, celle qui ne passe pas par un chip USB to serial pour avoir la vitesse la plus élevée possible. A priori, j'arrive à flasher mon ESP32 via cette prise, donc ce transfert doit être possible. Y a-t-il un exemple simple qui montre comment faire, SVP?
Merci
David

peut-être cela

Je regarde, merci bien de votre réponse.

Non, ça n'a pas l'air de marcher. Merci en tout cas.
David

vous avez mis cela ?

Bonsoir

Il suffit de choisir CDC On Boot Enabled avant compilation dans le menu de l'IDE et les Serial.print() sortent par la prise USB liée à l'USB natif de la puce.

C'est d'ailleurs indispensable pour les diverses cartes n'ayant pas de puce UART/USB et donc une seule embase USB.

@J-M-L Oui, j'ai copié tout le texte.
@al1fch J'essaye ça merci beaucoup. J'espère pouvoir utiliser les Serial.read() et Serial.write() sur cet USB.
David

Les premiers essais marchent (dans le sens ESP32S3 -> PC), je continuerai demain mes tests. C'est top, merci beaucoup, c'était si simple.
Le baudrate dans "Serial.begin(baudrate)" a un intérêt? J'ai pu monter à 5.000.000 sans que ça ne fasse d'erreur. Par contre, il semble que je sois limité à 64 octets à la fois.

Je ne parlais pas de copier les commentaires (ça ne sert à rien dans le code) mais de faire ce que dit le commentaire

Non vous aurez la vitesse de l’USB je pense.

Que voulez vous dire par 64 octets ?

Désolé, je n'avais pas vu que c'était un commentaire, je n'utilise que les // et /*. Alors non, je n'avais pas fait, désolé.

Que voulez vous dire par 64 octets ?

J'utilise libserialport pour envoyer/recevoir mes données sur le PC. Si je fais un "sp_blocking_write()" de plus de 64 octets, j'ai une erreur en retour.

le driver sous jacent a peut-être un buffer limité à 64 octets

Je vais me renseigner, merci à vous 2 de l'aide.

RxBufferSize (à vérifier par la pratique...)

https://docs.espressif.com/projects/arduino-esp32/en/latest/api/usb_cdc.html

En règle générale la documentation d'Espressif pour le core ESP32 est à consulter, infos de première main !
https://docs.espressif.com/projects/arduino-esp32/en/latest/

Non, mon code est le suivant:

#define SERIAL_TIMEOUT 10000

void setup()
{
  Serial.begin(5000000);
  while (!Serial);
  Serial.setRxBufferSize(512);
  Serial.setTimeout(SERIAL_TIMEOUT);
}

unsigned char mymem[256];

#define N_SEND 64

void loop() {
  while (Serial.available()==0);
  //unsigned int nVal=Serial.read();
  int receivedBytes=Serial.readBytes(mymem, N_SEND);//nVal);
  if (receivedBytes==N_SEND && Serial.available()==0)
  {
    bool oneerror=false;
    for (int i=1;i<N_SEND;i++)
    {
      if (mymem[i]!=mymem[0]) 
      {
        oneerror=true;
        Serial.write(0);
        while (Serial.available()>0) Serial.readBytes(mymem,256);
        Serial.write("R");
      }
    }
    if (!oneerror)
    {
      for (int i=0;i<N_SEND;i++) Serial.write(mymem[0]);
    }
  }
  else
  {
    Serial.write(0);
    while (Serial.available()>0) Serial.readBytes(mymem,256);
    Serial.write("R");
  }
}

Donc:

  • PC: envoi de 64 valeurs identiques
  • ESP32: tout est vérifié et si OK, tout est renvoyé
  • PC: la 45e, 46e, 47e et 48e valeurs sont systématiquement fausses, les autres sont juste.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.