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.

[参考译文] Linux/processor-SDK-AM335X:UART 驱动程序问题

Guru**** 2558250 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/610194/linux-processor-sdk-am335x-uart-driver-issue

器件型号:PROCESSOR-SDK-AM335X

工具/软件:Linux

大家好

我在 Linux 3.12上运行 AM335x。

基本上从 OMAP UART 读取数据、问题是每次只读取1个字节始终被读取。

下面看一下 OMAP UART 驱动程序的配置

/* FIFO 使能、DMA 模式*/

UP->SCR |= OMA_UART_SCR_RX_TRIG_GRANU1_MASK;
/*
*注意:设置 OMA_UART_SCR_RX_TRIG_GRANU1_MASK
*设置为触发 RX 启用1的粒度
*级别。 以及设置 RX FIFO 触发电平
*更改为1 (如下所述、16个字符)和 TLR[3:0]
*设为零将导致 RX FIFO 阈值电平
*改为1个字符、而不是注释中所述的16个字符
*。
*

/*将接收 FIFO 阈值设置为16个字符,然后
*发送 FIFO 阈值到16个空格
*
up->FCR &=~OMAP-UART_FCR_RX_FIFO_TRIG_MASK;
up->FCR &=~OMAP-UART_FCR_TX_FIFO_TRIG_MASK;
up->FCR |= UART_FCR6_R_TRIGGER_16 | UART_FCR6_T_TRIGGER_24 |
UART_FCR_ENABLE_FIFO;

我尝试删除它可以读取多个1的粒度、但数据存在问题。

有人能帮我将正确的配置设置为驱动程序吗  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    这是定制板吗?
    您能否切换到使用标准8250驱动程序的最新 SDK (内核4.9)?

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我无法切换到4.12、因为我们的所有开发都是在这个电路板上完成的。

    我需要为此内核进行配置。

    我需要做什么配置更改?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、让我看看这些来源、我将使用我的任何反馈进行更新。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢...正在等待您的回复
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Yordan Kovachev 您好、

    我仍在等待您对此问题的答复。

    请更新我的信息
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    很抱歉耽误你的时间。

    除了禁用 Rx 触发器粒度(SCR[位7]= 0x0)之外、您是否考虑了 DMA 模式(SCR 寄存器、位0至位2)?

    此外、您还需要按照 AM335x TRM 的第19.3.6.1.2节接收 FIFO 触发中的说明来处理 FCR 寄存器。
    e2e.ti.com/.../2250631
    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    FCR 寄存器的 TRM RX_FIFO_TRIG 值

    设置 RX FIFO 的触发电平:如果 SCR[7]= 0且 TLR[7]为
    TLR[4]不等于0000、不考虑 RX_FIFO_TRIG。
    如果 SCR[7]= 1、RX_FIFO_TRIG 为触发电平的2 LSB (1至63
    6位)、粒度为1。
    如果 SCR[7]= 0且 TLR[7]至 TLR[4]= 0000、则:
    0h = 8个字符
    1h = 16个字符
    2h = 56个字符
    3h = 60个字符

    我将 SCR[7]= 0且 TLR[7]更改为 TLR[4]= 0000、并将 RX_FIFO_TRIG 更改为1h (16个字符)

    我可以读取10个字节、但读取的数据始终为0。

    读取1:0x87
    读取3:0x0 0x0 0x0
    读取10:0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0
    读取10:0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0
    读取10:0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0
    读取10:0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0
    读取1:0x0