今天測試了DS3231 這個傳感器,這個傳感器的其他的特點不在贅述,資料很齊全。 主要是和大家分享一下我遇到的問題。
先說明原因 缺少了一個 ACK位 SCL時鐘的第一個時鐘給了 ACK 之後 所有回讀的bit 都錯位了。 在 IIC 的讀時序裏面 少了一個ACK
測試的時候發現打印的數據裏面的 秒數據兩秒一跳 串口打印回來的數據是這樣的
已知我的串口打印的時間間隔是500ms,我很容易的就猜出是 bit 錯位了,然後就開始找bit 錯位的原因 查找代碼部分
第一步是驗證 確實是bit 發生了錯位 我直接將數據右移一位 發現對得上了 , 數據全部是偶數,然後 時間間隔是兩秒鐘
接下來是找問題 一開始懷疑是 BCD 轉 HEX 部分出問題 所以我在最底層的bit 讀取部分加了 打印, 打印出每一個 bit
發現在讀取的時候就發生了bit的錯位,這樣基本就可以 確定是IIC的底層部分出了問題
讀數據手冊發現 了這個ACK 和我的代碼裏面以前寫過的不是很一樣, 加上ACK
解決了問題
問題就是因爲我缺少了一個 ACK位 SCL時鐘的第一個時鐘給了 ACK 之後 所有回讀的bit 都錯位了。