花了正好一個星期的時間,終於基本上調通了,當然,不僅是指可以正確通過SPI和片子交互,而且采集氧量信號的精度也是非常高,至少在mv級別了。
過程中遇到了一系列問題,搞的人也是很崩潰。
先是SPI通訊的問題,ADI官方給的開發板的代碼,用的並不是keil,spi的讀寫函數我根本沒法用,因此只好自己來寫。
我的spi代碼從5420移植而來,但7124和5420有很大的不同,而且復雜了很多。
5420的讀寫是兩函數,而7124的讀寫需要整合為一個.
在讀寫count個字節時,5420的for是從count開始,而7124是從0開始,因為剛開始時沒有搞對,所以導致讀出的數據都是反的,
比如讀id,正確的是0x04,但我讀出的卻是0x20
還有,在5420中是CLR_SCL之后才給SDIN上放數據,但對於7124卻需要在CLR_SCL之前放數據。
因為手冊中描述:SCL下降沿驅動數據,上升沿鎖存數據。
接着,遇到的問題是,讀出的數據最后一位數據總是為0,比如 AD7124_Channel_0 手冊上說讀出來應該是0x8001,但我讀出來卻是0x8000,
又仔細研究了手冊,手冊上說,似乎在轉換完成后DOUT/RDY腳會切換為RDY功能且為0表示數據有效可以被讀取,而在讀取之后才被重新置為1。
所以,懷疑是我讀最后一位的時機不對(太晚了,以致於DOUT/RDY腳處於RDY功能且為0)
程序調整后(把從SDOUT讀取數據的操作放在了SET_SCL之前),讀取正確。
然后測試20mv標准信號,但始終得到的結果是18mv,嘗試了各種校准,但都么有卵用。在崩潰,好心網友提示說可以測下內部2.5V,測量后竟然非常准確。
驚喜之余,又直接測了氧量信號(用信號源模擬),結果也非常精確。
我暈!難道是我對20mv標准信號的理解不對!!!
