Setting serial baud rate on ESP-IDF does nothing

(atomic14.substack.com)

33 points | by iamflimflam1 a day ago ago

31 comments

  • jeroenhd 9 minutes ago ago

    That's not ESP-IDF, that's the Arduino wrapper around ESP-IDF.

    Setting the baud rate does actually do something (just follow the baudRate parameter here: https://github.com/espressif/arduino-esp32/blob/master/cores...), it just doesn't affect the output speed of the USB serial output.

    If you specify non-default pins for the serial output (i.e. you're opening a second serial connection to talk to another piece of hardware) the begin() method does influence the data rate.

    Also, there are dev boards out there that do actually use a TTL converter and USB-to-serial converter to access the standard serial port, though they're not very common as far as I can tell, so I wouldn't just assume the baud rate setting does nothing on the standard pins either.

  • bloggie 5 hours ago ago

    Virtual com ports or USB CDC do not require a baud rate as it's not a real serial port. As mentioned ESP32 has native USB and Arduino/ESP-IDF use USB CDC over this port to communicate with a host computer. Serial.begin() is used for all kinds of serial ports including virtual serial ports. Those libraries probably require a baudrate argument for Serial.begin() which will be ignored. This is probably in the documentation for that function.

    If the same function is used on a physical serial port (of which there are a few on ESP32 iirc) the baudrate argument will be used to set the baudrate setting in the peripheral by the library.

    • kevin_thibedeau 2 hours ago ago

      The purpose of baud and other control settings for CDC devices is so that they can serve as a pass-through for a real UART that will need to know what those settings are. Those control packets can be ignored if that never happens.

      • bobmcnamara an hour ago ago

        And you can use esoteric settings to trigger device test modes!

  • matthews3 8 hours ago ago

    The baud rate is just sent to the USB device, so that if you were making a real USB-serial adapter, you'd know how fast to go :)

  • robjwells 8 hours ago ago

    I believe this is just down to USB CDC, where baudrate doesn’t affect the USB transfer speed.

    • raverbashing 7 hours ago ago

      This makes perfect sense for backward compatibility reasons

  • cluckindan 7 hours ago ago

    The author seems a bit confused about megabits (Mb, Mbit) and megabytes (MB)

  • fgh 8 hours ago ago

    The screenshot shows a software called "WebSerial Audio Studio". I couldn't find it, only https://serial-studio.com/ which also looks great (and has an open source edition). Does anyone know if it is the same? Looks pretty handy. Microchip had something not so sophisticated years ago.

  • whatever1 9 hours ago ago

    Is it common for microcontrollers to lack comprehensive documentation, or is it just espressif?

    • LiamPowell 9 hours ago ago

      I'm not sure what you mean. There's a 779 page reference manual for the ESP32 series: https://www.espressif.com/sites/default/files/documentation/...

    • estimator7292 2 hours ago ago

      Espressif has some of the most thorough documentation in the entire industry.

      TI (a major American IC manufacturer) regularly shits out half baked datasheets missing important information or incomplete explanations of equations. All the American vendors have terrible documentation.

      • baby_souffle an hour ago ago

        > All the American vendors have terrible documentation

        And half the time you don’t even find out until you’ve created an account and signed an NDA!

        Nordic and espressif are some of the good ones, they’re showing up on a lot of my designs for this reason…

    • riedel 8 hours ago ago

      My experience with microcontrollers is not up to date. Most of the stuff I did was 15 years ago.I remember, Espressif really disrupted the market. Things changed already with Advent of Arduino. Before that people wrote a lot of asm code inline and MCUs particularly from microchip had really good documentations (sure some quirks and errata always appeared later, but as I remember they found their ways into data sheets and application notes). Particularly as binary blobs e.g. for network appeared the API went from well defined hardware interfaces to libraries, etc. Today it is even common for some of those domain specific IC that typically rather contain an MCU that you have to sign NDAs to get access to documentation of some parts.

      • Catbert59 8 hours ago ago

        > Most of the stuff I did was 15 years ago.I remember, Espressif really disrupted the market.

        They still are.

        No vendor until now was able to push out microcontrollers with a solid Wifi integration. Sometimes you can find weird 2-chip-solutions.

        I still wonder why ST doesn't bring one. That device would be a multi-billion-business.

        • estimator7292 2 hours ago ago

          ST doesn't want to make one because then you can do OTA firmware updates without their special $60 usb to serial adapter that won't work for non-st parts

          • Catbert59 an hour ago ago

            All of the newer STM32s have ROM-bootloaders that support UART- or even USB-flash.

            For SWD you can one of the ST-Link clones or the free open implementations of it.

        • 05 7 hours ago ago

          ST are overpriced, no self respecting internet of shit vendor would be caught dead using their MCUs when cheap clones exist.

          • Catbert59 7 hours ago ago

            Most clones aren't even close compatible to their originals.

            Maybe some basic stuff like usart, i2c works fine. But the the deeper you dig into the specialties the more you will have problems.

            And STM32s and expensive? Maybe if you buy them from Digikey or Mouser. With the right distributor they are dirt cheap.

            • 05 5 hours ago ago

              Lots of horror stories from people who had to respin their boards because you couldn't buy ST at any price when they redirected all their output to car manufacturers during the chip shortage. They may be cheaper now but vendor lock-in never helped anyone (except that vendor) in the long run. Oh, and most Chinese wifi gadgets use Beken nowadays because it's even cheaper than Espressif, what are the chances of them switching to a more expensive chipset instead?

              • Catbert59 4 hours ago ago

                We never had problems as a small vendor with ST during the chip crisis and all distributors honored our delivery contracts. Even most big companies don't deal with ST directly when it comes to the last mile.

                Porting stuff to another microcontroller would be easy as we are not using too proprietary features... as long the uC has SPI/I2C and a bunch of timers the embedded developers will be happy. Thanks to Zephyr.

                • 05 36 minutes ago ago

                  > Thanks to Zephyr.

                  That only gets you proper support for a couple vendors (Nordic, ST), everything else is a nightmare. Even with better-supported vendors, there are whole swaths of things that aren't properly supported and you need to directly call code from underlying vendor SDK to make things work. That bodge makes the whole project non-portable. Even some simple things like ADC DMA on ST F1 series..

                  • Catbert59 10 minutes ago ago

                    Can't share your experience.

                    Sometimes stuff is missing. But that's implemented and upstreamed quickly.

      • MalbertKerman 2 hours ago ago

        > MCUs particularly from microchip had really good documentation

        Oh how the mighty have fallen. I've only worked on one major project with a Microchip MCU (PIC32MK), but their documentation and support were terrible. No detailed documentation, just a driver library with vague, sketchy API docs and disgustingly bug-ridden code. Deadlocking race conditions in the CAN driver, overflow-unsafe comparisons in timers, just intern-level dumbassery that you couldn't fix without reverse engineering the undocumented hardware. Oh, and of course what documentation did exist was split into dozens of separate PDFs, individually served, many of which were 404 unless you went hunting for older versions or other chips in the product line. It certainly cured me of any desire to touch another Microchip product.

    • Catbert59 8 hours ago ago

      Espressif has stellar datasheets and a very good HAL (esp-idf) with an established community process.

      This is more about the application running on that device.

    • ACCount37 4 hours ago ago

      Espressif's docs are good. You don't want to know what "really bad documentation" looks like in embedded.

    • publicmail 3 hours ago ago

      Can’t speak for others, but AVRs usually have excellent documentation IMO. I’ve even seen code snippets for peripherals.

    • f1shy 9 hours ago ago

      There are very well documented uCs. I have to admit , is not like in the good old days, but there are decent documented uCs.

      One thing is happening: as uC (and ASIcs) are getting more complex and complicated, more features are added and not fully (or at all) documented.

    • ocdtrekkie 8 hours ago ago

      I was troubleshooting some code of mine that talks to a product Adafruit has been selling for ten years. It turns out the documentation was just plain wrong. Thankfully Adafruit's source code was posted and I could quite confidently see the right way to do it, and submitted feedback on the documentation bug.

      But I think this is a space where due to the relative ease and cheapness of putting out a product and often fixing it after the fact, there's less eyeballs on any given aspect of a board or the software loaded on it.

      And a years younger me noticed the issue! But I worked around it instead of reporting it. This time I figured out the source of the problem... but the documentation has been wrong a long time in between. ;)

    • blkhawk 9 hours ago ago

      uh - you clearly misunderstood something. The video is about the port of the Arduino framework that is running on the ESP32. on the ESP32-S* that have native USB that has implications that makes the option of setting a baud rate for them using the Arduino Framework superfluous. The ESP32 Variants have pretty good documentation themself.