ZHDZ012G December 2020 – June 2026 DRA829J , DRA829J-Q1 , DRA829V , DRA829V-Q1 , TDA4VM , TDA4VM-Q1
USB:在器件模式下从系统存储器读取 TRB 时的争用条件
以下序列将确保不传输过时的数据:
USB 器件控制器使用 12 字节传输请求块 (TRB) 数据结构,用于在系统存储器中形成传输环。TRB 包含指向存储器中数据缓冲区的指针,其中包含要通过 USB 传输的数据或存储通过 USB 接收的数据的位置。传输环管理使用生产者-使用者模型,其中软件是生产者,而控制器是使用者。TRB 的所有权通过 TRB 内的“周期”位字段在软件与硬件之间转移。软件将 TRB 写入存储器和硬件从存储器中读取 TRB 的操作预期即为原子操作。
出现该问题是因为控制器使用两个独立的 DMA 事务(8 字节事务,后跟 4 字节事务)从系统存储器读取 TRB。因此,控制器的 TRB 读取操作并非原子操作。如果软件写入 TRB 发生在硬件读取前 8 个字节后,则可能会导致 IN 事务中的数据传输过时,并在 OUT 事务时向软件提供过时的数据。
“周期”位是最低有效位,由控制器在第二次 DMA 传输中读取。存在争用条件的原因是软件写入可能会交错在两个读取事务之间。以下事件顺序可能会导致 USB 总线上的数据传输损坏:
该问题仅影响器件模式。