最近在使用國民 N32G030 開發板,調試一個 I2C 從設備,參考其 EEPROM 工程,話不多說,直接上問題。
硬體平台:N32G030F6S7_STB 開發板
IDE : keil
SDK 版本:V2.1.0
將例程編譯下載到板子上,由於使用的板子與例程引腳不一樣,做以下修改:
I2C 引腳 PA6 PA7
我們這裡外接了一個從設備,地址為 0X75,可以使用 EEPROM 也可以使用其它的 I2C 從設備,協議基本和 EEPROM 相同,根據從設備修改一下從機地址和波特率就可以,我們抓取 I2C 出來的波形如下:
翻開了晶片手冊,對應的讀取數據協議應該如下圖所示:
對比波形圖可以看出,MCU 在讀取數據第 9 個時鐘為 NACK 後先是發了一個開始信號,再發的停止信號,而從設備要求的時序則是在需要直接發個停止信號,所以這裡會造成從設備出錯,下一次再去發送命令從設備則會返回 NACK ,因為此時從設備工作不正常了,那麼需要怎麼去掉這個起始信號呢?
通過 UM 發現 I2C 主機讀取流程說明中對於讀取一個字節有要求,需要提前使能 stop ,
我們在 I2C_EE_ReadBuffer 函數中做以下修改:
提前使用 stop ,添加 Ack Enable
修改完後即可正常讀取單個字節,時序與手冊對應
參考資料:
《UM_N32G030 Series User Manual V2.1》
評論