我们有一个基于 Atom Z510/Intel SCH US15W Q7 卡(运行 Debian Linux)的系统。我们需要从低引脚数总线上的设备传输数据块。据我所知,该芯片组不提供 DMA 功能,这意味着处理器必须在软件循环中一次读取一个字节的数据。(设备驱动程序实际上是使用“rep insb”x86 指令来实现的,所以如果我理解正确的话,循环实际上是由 CPU 实现的。)
这远非最佳,但应该可以达到 14Mb/s 的传输速率。相反,我们几乎无法管理 4Mb/s,总线上的事务间隔不小于 2us,即使对从设备的每次读取都是在 560ns 内完成的。我不认为公共汽车上的其他交通是罪魁祸首,但仍在调查。
我的问题是:
有谁知道SCH上是否有任何可能影响LPC总线时序的配置寄存器?
我在英特尔网站上找不到有关该设备的任何有用信息,也没有在 Linux 内核代码中发现任何似乎在摆弄任何此类寄存器的东西(但在涉及 Linux 内核的东西时,我是个菜鸟。)
我不是 x86 专家,因此任何其他可能起作用的因素或与此设备相关的任何其他“战争故事”也很高兴知道。
编辑:我找到了数据表。我没有看到任何解释这种行为的东西,但我正在研究将我们的设备映射为固件设备的可能性,因为固件总线周期似乎没有遭受同样的延迟。