关于 printk() 对 spi slave 内核驱动程序的性能影响
調(diào)試 imx6 的 spi slave 內(nèi)核驅(qū)動,前期調(diào)試總免不了得要追一下寄存器的設(shè)置,過程函數(shù)的調(diào)用。
采用了 printk() 打印語句。
?
1、采用的硬件方法是:
分析 imx6 spi slave 的各路引腳主要是 clk, cs, mosi, miso, gnd, vcc,連接至spi 主端(CC1110f32 MCU)
的各路對應(yīng)引腳。對應(yīng)如下:
| ?imx6 spi 從機 | cc1110f32 spi 主機 |
| vcc | vcc |
| gnd | gnd |
| clk | clk |
| cs | cs |
| mosi | mosi |
| miso | miso |
2、采用的軟件方法是:
1)官方的補丁程序 https://community.freescale.com/docs/DOC-97380
2)不能直接打補丁,照著修改之后,參考spi datasheet 進(jìn)行源碼分析,使用printk() 跟蹤數(shù)據(jù)流
3)確保主從端使用的 cpol, cpha, cs, sclk 的配置一致
?
3、最終結(jié)果:
spi slave 端只能正確接收從spi 主端發(fā)出的單個字節(jié)的數(shù)據(jù),接收多個數(shù)據(jù)后數(shù)據(jù)發(fā)生丟字節(jié)情況。
在每個片選之間加 類似于
for (i=0; i < 10000; i++);的延時后發(fā)現(xiàn),當(dāng)i < 10000時,多個字節(jié)數(shù)據(jù)接收正確,當(dāng) i < 5000 時,多個字節(jié)數(shù)據(jù)只接收了一半正確數(shù)據(jù)。
比如 0 1 2 3 4 5 6 7 8 9 在 i < 10000 時,spi slave 端接收到的是 0 1 2 3 4 5 6 7 8 9
在 i < 5000 時, spi slave 端接收到的是 0 2 4 6 8
在 i < 2000 時,spi slave 端接收到的甚至是 0 4 8
?
于是,將內(nèi)核中的 printk() 去掉之后,發(fā)現(xiàn)只要在每次片選之間添加不到100us? 的延時,接收端即可正確接收
主spi 端發(fā)來的數(shù)據(jù),而無數(shù)據(jù)丟失。
?
至此,得出一個結(jié)論:在涉及通訊類總線的調(diào)試時,前期在 printk() 的情況下進(jìn)行單字節(jié)的發(fā)送接收是可以的。
一旦面臨快速發(fā)送接收的時候,printk() 這樣的調(diào)試語句將嚴(yán)重影響總線的性能,畢竟 printk() 占用了總線通信
時間。
?
轉(zhuǎn)載于:https://www.cnblogs.com/aqing1987/p/4423283.html
總結(jié)
以上是生活随笔為你收集整理的关于 printk() 对 spi slave 内核驱动程序的性能影响的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Git命令操作教程
- 下一篇: JSP语法,运行机理等