1 Reply Latest reply on Apr 28, 2015 7:16 AM by DiegoV_Intel

    Incorrect Info. from official intel FAQ on baud rate support (500kbps UART)

    sglee367

      Hi, I've been trying to use Galileo Gen2 as an interface board between a PC and another board which requires data via UART at 500kbps baud rate.

       

      Before writing codes for Galileo, I wanted to make sure that Galileo Gen 2 supports 500 kbps UART.

       

      Unfortunately, there was no info about baud rate support in the datasheet nor pages that describe specifications.

      Finally I found some article on it. Re: ETA on full-speed UART?

      , where intel's FAQ does say that 500kbps is supported.

      I double checked on it by visiting the FAQ page : Intel® Galileo Boards and Kits — Frequently Asked Questions

       

      I could not use an logic analyzer to triple check and I didn't think I had to do so since It was info. from official FAQ.

       

      However, after writing almost all the codes that I needed for a few weeks, what I found today is that it does not support 500kbps and everything was set to believe 500kbps is available so naturally.


      1.

      Measuring actual period of the signal using an oscilloscope and trying receiving messages using an logic analyzer revealed that it was just transmitting data at 460800kbps (quadruple of 115200bps) even when I called Serial1.begin(500000), not Serial1.begin(460800) in the setup{ } block.


      2.

      Everything was totally misleading someone to believe 500kbps is available besides the FAQ.

      - The begin function of Serial1 (which is actually TTYUARTClass.begin) does not return exception value when invalid baudrate value was given as an argument. (Rather, it replaces the invalid baudrate with 115200bps)

      - The switch block in the begin function does consider 500000 baudrate as an appropriate input and executes ' _dwBaudRate = B500000; ' (check TTYUART.cpp)

        (when 460800 is given, ' _dwBaudRate = B460800; ' is executed)

      - Macros, defined in the termios.h, shows that

        #define  B460800  0010004

        #define  B500000  0010005

       

      If you just see the codes written like this, you can't think Serial1.begin(460800) and Serial1.begin(500000) works exactly the same.

       

      3.

      Datasheet of the quark processor, https://communities.intel.com/servlet/JiveServlet/previewBody/21828-102-2-25120/329676_QuarkDatasheet.pdf

      , which I didn't looked at before me writing codes, seems to say that 500000 is NOT supported actually. (at page 650)

       

       

      Anyone can tell me what is truly wrong??

      I can't believe this happening after I developed all the codes that I needed and all the other HW parts (those planned to work with Galileo) are ready.

      Did I make any silly mistake?? (I can't believe IF 500000bps is TRULY NOT available, THE Intel can be misleading this much. So I'm not 100% sure that I'm correct with everything)

       

      Thank you for reading this long thread.