1.IIC簡介
IIC即Inter Integrated Circuit,集成電路總線,是一種同步,串行,半雙工通信總線。
IIC總線協議——總線就是傳輸數據通道,協議就是傳輸數據的規則,有以下特點:
- 由時鐘線SCL和數據線SDA組成,并且都接上拉電阻,確保總線空閑狀態為高電平
- 總線支持多設備連接,允許多主機存在,每個設備都有一個唯一的地址
- 連接到總線上的數目受總線的最大電容400pf限制
- 數據傳輸速率:標準模式100k bit/s 快速模式400k bit/s 高速模式3.4Mbit/s
IIC協議時序
IIC通信過程
- 寫操作過程
- 讀操作過程
2.EEPROM與24C02簡介
EEPROM是一種掉電后數據不丟失的儲存器,常用來存儲一些配置信息,在系統重新上電時就可以加載
AT24C02是一個2K bit的EEPROM存儲器,使用IIC通信方式。
- A0/1/2 : 設備地址決定引腳
- WP : 寫保護引腳
- SCL : 時鐘線
- SDA : 數據線
24C02的通訊地址
24C04的儲存范圍是4Kbit=512KB,使用8位地址無法表示全其儲存地址(28=256KB),需要在設備地址中借位(29=512KB)
24C02的讀寫時序
-
寫操作
字節寫模式:一個地址一個數據進行寫入。
頁寫模式:連續寫入數據。只需要寫一個地址,連續寫入數據時地址會自增,但存在頁的限制,超出一頁時,超出數據覆蓋原先寫入的數據。但讀會自動翻頁。 -
讀操作
當前讀模式:基于上一次讀/寫操作的最后位置繼續讀出數據。
隨機地址讀模式:指定地址讀出數據。
順序讀模式:連續讀出數據。 -
寫操作過程(字節寫入/頁寫入)
注意:EEPROM比較慢,必須等到10ms后再寫下一個字節
-
讀操作過程
3.IIC協議驅動24C02實驗
- 硬件IIC——使用復雜、速度快、較穩定、特定引腳
- 軟件IIC——使用簡單、速度較慢、穩定、任意引腳
推薦使用軟件IIC,一是因為硬件IIC設計復雜,穩定性一般;二是因為軟件IIC方便移植
3.1.IIC配置步驟
- 使能SCL和SDA對應時鐘——__HAL_RCC_GPIOB_CLK_ENABLE()
- 設置GPIO工作模式——SDA開漏SCL推挽輸出,使用HAL_GPIO_Init初始化
- 編寫基本信號——起始信號、停止信號、應答信號
- 編寫讀和寫函數——iic_read_byte、iic_send_byte
注意:發送完成,主機釋放SDA
為什么IIC總線SDA建議用開漏模式?
- IIC的SDA腳即要作為輸出,又要作為輸入,用開漏輸出模式,很好實現輸出輸入共用,避免IO模式頻繁切換帶來的麻煩。
- 輸出時:主機(MCU)輸出0,可以拉低信號,實現低電平發送,主機輸出1(實際不起作用),由外部上拉電阻上拉,實現高電平發送
- 輸入時:主機(MCU)設置輸出1狀態,此時因為MCU無法輸出1,相當于釋放了SDA腳,此時外部器件可以主動拉低SDA腳/釋放SDA腳(同樣由上拉電阻提供“輸出1的功能”),實現SDA腳的高低電平變化。
- 由于開漏輸出模式下,MCU還是可以讀取IDR狀態寄存器,來獲取引腳高低電平,因此MCU讀取IDR,即可獲得SDA腳的高低電平狀態,從而實現輸入檢測。
也可以參考http://t.csdn.cn/fLxa9和http://t.csdn.cn/3x1wU
3.2.24C02配置步驟
- 初始化IIC接口
- 編寫寫入/讀取一個字節數據函數——遵循時序流程編寫
- 編寫連續讀和連續寫函數——在上面的基礎上進行實現