This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

OMAP L138 uart1 maximum baud rate

Other Parts Discussed in Thread: OMAP-L138, WL1271, TEST2

I am working on L138 EVM (Linux-PSP-03.20.00.12). As i need to use UART1, i enabled the UART1 in the kernel.

It' is working fine with default baud rate (115200).

Then, i tried to change the baud rate to higher values  using one application (cfsetispeed + tcsetattr). It didn't work.

Table -21 of the User Guide (TMS320C674x/OMAP-L1x Processor -Universal Asynchronous Receiver/Transmitter (UART) - Literature Number: SPRUFM6B) says that maximum baud rate is 128 kbps.

Is that true?

Can i set baud rate to 3Mbps?

Thank you for your time.

Sinoj

  • Sinoj,

    The UART hardware is capable of supporting the faster buad rate.  I'm not sure if there are any Linux driver caveats.

    -Tommy

  • Hi Sinoj,

        UART 0/1/2 in OMAP-L138 supports Programmable Baud Rate up to 3MBaud. However Linux framework has not defined flags for BAUD rates higher than 921600. You can check in the file "drivers/serial/serial_core.c", Variable - baud_rates to get the list of supported ones. You can add higher values & try.

    Regards,

    Amit

  • Hi Tommy,Amit,

    Thank you very much for your responses.

    I checked  the serial_core.c, it seems baud rate limitation beyond 921600 is for serial console.

    On our board, the UART1 is interfaced with Bluetooth device. Also, i am able to set the speed to 2Mbps (divisor = 4).

    However, the link fails after some time.

    Is there a bus limitation since the UART1 CTS is pinmuxed with AHCLKX (MCASP)?

    Thanks,

    Sinoj

     

     

     

  • Sinoj,

    sinoj issac said:
    However, the link fails after some time.

    Can you please add some more detail on the issue? A description of the setup, details on which link fails and debug infomation at hand (Are there any error logs? Are there any diagnostics on the bluetooth device which can help find why the link failed?)

    Thanks,

    Sekhar

     

  • Hi Sekhar,

    We use Bluez-4.60 (Linux Bluetooth Stack) for WL1271 chip. The WL1271 daughter card mate connector J30 of the L138 EVM base board.
    4 UART1 lines are being used for Bluetooth HCI interface.

    There is a Bluez command (hciattach) to bring bluetooth device up. For the WL1271, there is a firware file (under /lib/firware/ on root file system) which will be downloaded to the device by the 'hciattch'.

    Initially, the buad rate of the uart interface is set to 115200 and the host (Here L138 processor) send one HCI command to get the device (WL1271) Chip version and the chip will respond back with an HCI event that includes Chip version details.

    Once the chip get detected, the host (L138) can either continue with the same speed or change speed to different baud rate. If the host wants to change the speed it will re-configure the baud rate in the UART driver and also instruct the device (WL1271) to use a different speed. Instruction to the device is in the form of a HCI command which is added in the firmware file.

    To configure the WL1271 and set baud rate we use the following command:

    hciattach /dev/ttyS1 texas <baud rate>



    If baud rate is set to 115200, BT is up and running. able to do BT functions, scan, browse,...

    If baud rate is set to 2000000, BT is up, not able to do BT functions, scan, browse,.. consistently.

    if baud rate is set to 3000000, not able to bring up the WL1271.

    The log that  i got is as follows:

    ---------------------------------------------------------------------------------------------------------------------------
    Starting syslogd/klogd: done
    Starting thttpd.

     _____                    _____           _         _  
    |  _  |___ ___ ___ ___   |  _  |___ ___  |_|___ ___| |_
    |     |  _| .'| . | . |  |   __|  _| . | | | -_|  _|  _|
    |__|__|_| |__,|_  |___|  |__|  |_| |___|_| |___|___|_| 
                  |___|                    |___|           

    Arago Project http://arago-project.org da850-omapl138-evm ttyS2

    Arago 2009.11 da850-omapl138-evm ttyS2

    da850-omapl138-evm login: root

    ================================================================================
     TEST1 - 3M Baud rate
    ================================================================================
    root@da850-omapl138-evm:~# cd /lib/firmware/
    root@da850-omapl138-evm:/lib/firmware# ls
    115k_TIInit_7.2.31.bts    3M_TIInit_7.2.31.bts
    2M_PCM_TIInit_7.2.31.bts  TIInit_7.2.31.bts
    root@da850-omapl138-evm:/lib/firmware# cp 3M_TIInit_7.2.31.bts TIInit_7.2.31.bts
    root@da850-omapl138-evm:/lib/firmware#
    root@da850-omapl138-evm:/lib/firmware# ls
    115k_TIInit_7.2.31.bts    3M_TIInit_7.2.31.bts
    2M_PCM_TIInit_7.2.31.bts  TIInit_7.2.31.bts
    root@da850-omapl138-evm:/lib/firmware# cd -
    /home/root
    root@da850-omapl138-evm:~# cd bluetooth_scripts/
    root@da850-omapl138-evm:~/bluetooth_scripts# export LD_LIBRARY_PATH=/usr/local/w
    l1271/wl1271_bluetooth/lib:$LD_LIBRARY_PATH
    root@da850-omapl138-evm:~/bluetooth_scripts# export PATH=/usr/local/wl1271/wl127
    1_bluetooth/bin:/usr/local/wl1271/wl1271_bluetooth/sbin:$PATH
    root@da850-omapl138-evm:~/bluetooth_scripts# insmod gpio_en.ko
    Gpio value is :15
    GPIO: Set HIGH
    root@da850-omapl138-evm:~/bluetooth_scripts# dbus-daemon --system
    root@da850-omapl138-evm:~/bluetooth_scripts# bluetoothd

    root@da850-omapl138-evm:~/bluetooth_scripts# hciattach /dev/ttyS1 texas 3000000
    Found a Texas Instruments' chip!
    Firmware file : /lib/firmware/TIInit_7.2.31.bts
    Loaded BTS script version 1
    texas: changing baud rate to 3000000, flow control to 1
    Initialization timed out.
    root@da850-omapl138-evm:~/bluetooth_scripts# killall bluetoothd
    root@da850-omapl138-evm:~/bluetooth_scripts# rmmod gpio_en   
    GPIO: Set LOW

    ================================================================================
     TEST2 - 2M Baud rate
    ================================================================================

    root@da850-omapl138-evm:~/bluetooth_scripts# cd /lib/firmware/
    root@da850-omapl138-evm:/lib/firmware# ls
    115k_TIInit_7.2.31.bts    3M_TIInit_7.2.31.bts
    2M_PCM_TIInit_7.2.31.bts  TIInit_7.2.31.bts
    root@da850-omapl138-evm:/lib/firmware# cp 2M_PCM_TIInit_7.2.31.bts TIInit_7.2.31
    .bts      
    root@da850-omapl138-evm:/lib/firmware# cd -
    /home/root/bluetooth_scripts
    root@da850-omapl138-evm:~/bluetooth_scripts# insmod gpio_en.ko
    Gpio value is :15
    GPIO: Set HIGH
    root@da850-omapl138-evm:~/bluetooth_scripts# bluetoothd
    root@da850-omapl138-evm:~/bluetooth_scripts# hciattach /dev/ttyS1 texas 2000000
    Found a Texas Instruments' chip!
    Firmware file : /lib/firmware/TIInit_7.2.31.bts
    Loaded BTS script version 1
    texas: changing baud rate to 2000000, flow control to 1
    Device setup complete
    root@da850-omapl138-evm:~/bluetooth_scripts# hciconfig
    hci0:   Type: UART
            BD Address: 00:23:D4:E8:7C:95 ACL MTU: 1021:4 SCO MTU: 180:4
            UP RUNNING PSCAN
            RX bytes:1028 acl:0 sco:0 events:32 errors:0
            TX bytes:1142 acl:0 sco:0 commands:32 errors:0

    root@da850-omapl138-evm:~/bluetooth_scripts# hciconfig hci0 piscan
    root@da850-omapl138-evm:~/bluetooth_scripts# hcitool scan
    Scanning ...
            00:1B:10:00:20:3A       Vocera-Test1
            00:1D:6E:12:7E:B6       SIN N72
            00:16:41:91:BF:34       n/a
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type 00
    ll_recv: Unknown HCI packet type b8
    ll_recv: Unknown HCI packet type 72
    ll_recv: Unknown HCI packet type d3
    ll_check_data_len: Data length is too large
    ll_recv: Unknown HCI packet type 96
    ll_recv: Unknown HCI packet type ee
    ll_recv: Unknown HCI packet type 7b
    ll_recv: Unknown HCI packet type 20
    ll_recv: Unknown HCI packet type 78

    ================================================================================
     TEST3 - 115200 Baud rate
    ================================================================================
    root@da850-omapl138-evm:~/bluetooth_scripts# killall bluetoothd
    root@da850-omapl138-evm:~/bluetooth_scripts# bluetoothd
    root@da850-omapl138-evm:~/bluetooth_scripts# hciattach /dev/ttyS1 texas 115200
    Found a Texas Instruments' chip!
    Firmware file : /lib/firmware/TIInit_7.2.31.bts
    Loaded BTS script version 1
    Device setup complete
    root@da850-omapl138-evm:~/bluetooth_scripts# hcitool scan
    Scanning ...
            00:16:41:A2:57:22       n/a
            00:1B:10:00:20:3A       Vocera-Test1
            00:1E:37:C4:4A:DC       BLACKBAZA-01
            00:16:41:A2:54:EA       ATHIF
            00:16:41:91:BF:34       SUNIL
            00:1E:37:C2:F5:19       SUJITKUMAR
            00:16:41:91:BC:E9       SRAJEEV
            00:1D:6E:12:7E:B6       SIN N72
            00:1E:37:C3:16:48       THAMPUZ

    ---------------------------------------------------------------------------------


    I can provide more information about the set up if needed


    Thanks,

    Sinoj

  • Sinoj,

    Are you able to scope the UART signals?  It would be interesting to see if the pins are toggling at the faster BAUD when transmitting and receiving.

    -Tommy

  • Hi,

    Yes,  i am able to probe those signals. i am trying find the exact baud rate.

    Also, the UART1 input clock value is 132Mhz. How can i change the UART input frequency to some other value (say 144Mhz..)?

    Thanks,

    Sinoj

     

  • Sinoj,

    The device clock tree is shown in the System Reference Guide.  The reference clock for UART is divided down from either PLL0 or PLL1.  The SYSCFG and PLLC modules contain the registers which would need to be updated.

    -Tommy

  • Thank you for the information on the uart clocks.

    We have got more accurate baud rates (2M, 3M) by changing the reference clock (pll1-sysclk2) for UART1. However, still we find stability issues as given in the logs provided earlier.

    Let me explain the problems we see now.

    Our WL1271 Bluetooth daughter card is connected to the UART1 of L138 EVM. The Bluetooth device supports various baud rates. For audio streaming applications, it is set to 2M or 3M baud rates.

    By default (on EVM), the reference clock rate for UART1 is 132MHz. With this default settings, we are able to set the baud rate to 2M and we can complete the firmware download and other Bluetooth initialization steps successfully. However, mostly while receiving data from the device (WL1271),  Bluetooth HCI layer on Host cannot decode the frames correctly or complains that received data is more than the buffer allocated, result in out of sync stream. I had attached similar logs earlier. These error messages are from the HCILL layer (drivers/bluetooth/hci_ll.c).

    At this clock rate (132M), 3M baud is not accurate and the device does not respond.

    Then, we change the reference clock to 138Mhz, now the device responds at 3M not at 2M.This could be because of accurate baud rates. see same issues as in 2M attempt.

    Since the behavior is similar at 2M and 3M, we use 2M for debugging the issue.

     

    In order to validate the Wl1721 bluetooth daughter card, we connected it to a OMAP3 EVM (PSP-03.00.01.06). We could run all applications at 3M baud. 

    It seems Flow Control is not working correctly at higher baud on L138. Still i am not sure whether it is hardware limitation or not

    Has anybody used UART on L138 at higher baud? Am i missing something in the port settings?

    One more addition:  the  UART device on L138 is 16550A (16 byte fifo) whereas OMAP35xx/37xx has 16750(64bytes fifo). Will it make such a difference?

    Thank you very much for you time.

    Sinoj

  • Sinoj,

    What Divisor and MDR settings are you using?

    When you say that the UART reference clock is 138, are you using PLL1_SYSCLK2 = 24MHz XTAL x 23 multiplier / 2 POSTDIV / 2 SYSCLK2 ?

    -Tommy

  • Tommy,

    You are right, when UART clock is 138M,  PLL1_SYSCLK2 = 24MHz XTAL x 23 multiplier / 2 POSTDIV / 2.

    No we work with 132M (default).

    Over sampling mode is 16x ( OSM_SEL value is 0 in MDR). For 2M baud, divisor is 4.

    Sinoj

     

  • Sinoj,

    Are you ensuring that both devices have the exact same baud rate?  For example, 132MHz and 138MHz do not produce the same baud rates:

    For 138MHz, you get:  138M / 4 DIV / 16 Samples = 2.15625 M baud rate

    For 132MHz, you get:  132M / 4 DIV / 16 Samples = 2.0625 M Baud rate

    -Tommy

  • Hi All,

    After applying UART patches generated by TI to the PSP 3.20.00.14 Linux kernel, WL1271 Bluetooth on AM180x EVM (connected to UART1 over expansion connector J30), is very stable now even at high baud rate (2M baud). Thanks to everybody involved, especially to AM180x PSP team for their good work.

    Best Regards,

    Sinoj