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.

AM2634-Q1: Redefinition Error with Multiple UART DMA LLD Instances - gUartDmaChCfg

Part Number: AM2634-Q1
Other Parts Discussed in Thread: SYSCONFIG

Tool/software:

Hi TI Team,

Do we have any updates on the thread below? Shaunak Deshpande mentioned he would look into it and resolve the issue by mid-July. 

Link - https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1524470/am2634-q1-redefinition-error-with-multiple-uart-dma-lld-instances---guartdmachcfg/5863506#5863506

Thanks,
Rahul

  • Hi Rahul,

    There was some change in our release commitments so the dates got changes internally along with the priority for bug fixes. I'm still working with the SDK team to get a fix for this.

    Shaunak

  • Hi Rahul,

    Please find attached the fix for the DMA LLD UART issue. Please replace these 3 files at the mentioned original locations in the SDK

    File-1: uart_v0_lld.c

    uart_v0_lld.c

    Path: mcu_plus_sdk_am263x_10_02_00_13\source\drivers\uart\v0\lld

    File-2: uart_open_close_config_v2_lld.c.xdt

    https://e2e.ti.com/cfs-file/__key/communityserver-discussions-components-files/908/2664.uart_5F00_open_5F00_close_5F00_config_5F00_v2_5F00_lld.c.xdt

    Path: mcu_plus_sdk_am263x_10_02_00_13\source\sysconfig\drivers\.meta\uart\templates

    File-3: uart_config_v2_lld.c.xdt

    https://e2e.ti.com/cfs-file/__key/communityserver-discussions-components-files/908/uart_5F00_config_5F00_v2_5F00_lld.c.xdt

    Path: mcu_plus_sdk_am263x_10_02_00_13\source\sysconfig\drivers\.meta\uart\templates

    After this, re-check the application configuration from syscfg and test.

    Regards,
    Shaunak

  • Hi Shaunak,

    I believe it is working, but I will test it thoroughly and update you if I encounter any issues.

    The only change I made in your files was to update the arguments in the read and write callback functions:

    void `config.readCallbackFxn`(struct UARTLLD_Object_s *args)

    TO 

    void `config.readCallbackFxn`(void *args) 

    void `config.writeCallbackFxn`(struct UARTLLD_Object_s *args) 

    TO

    void `config.writeCallbackFxn`(void *args) 

     

    Thanks,
    Rahul

  • Hi Shaunak,

    I noticed that during the transfer, some bytes are getting missed, and it’s happening quite frequently. Please check the output below:

    Available commands:
    help: Show available commands
    echo: Echo the arguments
    led: Change LED state
    uart: Send data on UART
    > help
    Available commands:
    help: Show available commands
    echo: Echo the arguments
    d: Change LED state                 ------> 'le' missed 
    uart: Send data on UART
    > help  

    As you can see in the above log, in the led: command, the characters "le" are missing.

    Thanks,
    Rahul

  • In SysConfig, the Transmit buffer size is limited to 56 bytes, and I am unable to set it higher. When I use the UART_lld_writeDma API to send more than 56 characters (for example, 100), the interrupt triggers twice instead of just once—ideally, one interrupt should occur only after all 100 bytes are transferred.

    This behaviour prevents me from fully utilising DMA to efficiently transfer large amounts of data in a single operation.

  • Hi Rahul,

    In SysConfig, the Transmit buffer size is limited to 56 bytes, and I am unable to set it higher.

    The UART IP does not support a interrupt trigger for 100B. There is no option to configure the UART IP to trigger an interrupt on reaching a FIFO level of 100B on both Rx and Tx paths.

    But this trigger level is not the buffer size, this indicates the number of bytes needed in UART FIFO to trigger interrupt. You can customize the buffer size in your application as it is not created/configured in the syscfg.

    Also a note,

    As the above provided patches are temporary and there will be even more bug-fixes in the official v11.0 SDK release, there is another change that will be added based on the UART IP Errata i2310. In DMA mode, the trigger levels that you will be allowed to set will be powers of 2 only. i.e., Trigger level of 1, 2, 4, 8, 16, 32. This is due to the errata i2310, which you can find more details about here: 

    I'd recommend designing your application accordingly so you don't have issues incase you migrate to v11.0 in future

    Regards,
    Shaunak