工具/软件:
如果在 CPU 频繁访问外部 SDRAM 时使用 UDMA 将 SSI 数据传输到外部 SDRAM、则传输过程中的数据将丢失。(仅 1 个字节)
观察波形、SSI 传输之间存在一个接近丢失数据的间隔。
我们认为 SSI 的接收 FIFO 已满、但 SSI 的接收 FIFO 在充满数据时是否正常输出 UDMA 请求?
CPU:TM4C129ENCPDT、120MHz
SSI:主器件、TI 模式、主器件、20MHz、8 位
SDRAM:16 位、30MHz
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.
工具/软件:
如果在 CPU 频繁访问外部 SDRAM 时使用 UDMA 将 SSI 数据传输到外部 SDRAM、则传输过程中的数据将丢失。(仅 1 个字节)
观察波形、SSI 传输之间存在一个接近丢失数据的间隔。
我们认为 SSI 的接收 FIFO 已满、但 SSI 的接收 FIFO 在充满数据时是否正常输出 UDMA 请求?
CPU:TM4C129ENCPDT、120MHz
SSI:主器件、TI 模式、主器件、20MHz、8 位
SDRAM:16 位、30MHz
尊敬的 Takeo-San:
传输过程中的数据将丢失。(仅 1 个字节)
查看波形时、SSI 传输之间有一个接近丢失数据的间隔。
被认为 SSI 的接收 FIFO 已满、但 SSI 的接收 FIFO 在充满数据时是否正常输出 UDMA 请求?
您能否检查 SSISR 寄存器中的 SSI RXFIFO 是否已满? 另请检查 SSI 和 UDMA 模块中是否检测到任何错误?
是否对 EPI 模块使用非阻塞读取或阻塞读取? 有关详细信息、请参阅数据表。 您能否使用 EPIFIFOLVL 以及是否有任何效果? 尝试降低 FIFO 级别、以便更频繁地生成 UDMA 请求。 结果是什么?
当 NBRFIFO 处于 EPIFOLVL 寄存器指定的级别时、非阻塞读取通道会从 NBRFIFO 复制值。 对于非阻塞读取、起始地址、每个事务的大小和元素计数必须在 μ µDMA 中编程。 请注意、可以使用两个非阻塞读取寄存器组、并填充 NBRFIFO、使一个运行到完成、然后下一个启动(它们不交错)。 使用 NBRFIFO 可提供最佳的传输速率。
另请注意、处理器的优先级始终高于 UDMA。
μ μDMA 控制器对总线的使用始终从属于处理器内核、因此它绝不会等待处理器的总线事务。 由于 μ μDMA 控制器仅使用以其他方式空闲的总线周期、因此它提供的数据传输带宽基本是自由的、不会影响系统的其余部分。 总线架构经过优化、大大增强了处理器内核和 μ μDMA 控制器有效共享片上总线的能力、从而提高了性能
感谢您的回答。
>能否检查 SSISR 寄存器中的 SSI RXFIFO 是否已满? 另请检查 SSI 和 UDMA 模块中是否检测到任何错误?
我只能在 DMA 完成且 RXRXF=0 后进行检查。(SSISR=0x3)
无法检查 DMA 错误状态、因为它在 DMA 完成时被清除。
>您是否正在为 EPI 模块使用非阻塞读取或阻塞读取? 有关详细信息、请参阅数据表。 您能否使用 EPIFIFOLVL 以及是否有任何效果? 尝试降低 FIFO 级别、以便更频繁地生成 UDMA 请求。 结果是什么?
仅使用阻塞读取。
我将 SDRAM 时钟从 30MHz 增加到 60MHz、并将 SSI 时钟从 20MHz 减少到 5MHz、即使时钟恢复到其原始设置、问题也不会再次发生。
最好吃的蔬菜
尊敬的 Takeo-San:
I 将 SDRAM 时钟从 30MHz 增加到 60MHz、并将 SSI 时钟从 20MHz 减少到 5MHz、并且即使时钟恢复到其原始设置、问题也不会再次出现。
您是否说问题不再发生? 似乎您正逐渐放弃 UDMA 和 CPU、尝试同时访问 SDRAM 并改变频率。 您能否运行更长时间以确认问题不会再次出现? 现在我很高兴这个问题得到了某种程度的解决。