一、Bit Bang
關(guān)于 Bit Bang 的解釋:Use software to control serial communication at general-purpose I/O pins,簡單來講就是使用軟件通過 IO 腳去實現(xiàn) I2C 的時序從而使用 I2C 協(xié)議進行通信。
這樣做的好處是可以突破硬件上的限制,例如芯片不具有硬件 I2C 模塊,或者硬件 I2C 模塊損壞,又或者使用硬件 I2C 模塊時布線非常麻煩。壞處是需要寫代碼模擬時序,根據(jù)不同的硬件平臺和不同的時鐘頻率,代碼中的部分參數(shù)是不一樣的。
二、代碼分析
使用軟件模擬 I2C 的步驟如下:
1、設(shè)置 GPIO 管腳
設(shè)置兩個管腳作為 SCL 和 SDA,例如 GPIOA1 和 GPIOA2

2、SCL時鐘周期

3、附加設(shè)置
這里主要是使用宏定義模擬函數(shù)

4、I2C 啟動

5、I2C停止

6、發(fā)送 8 位數(shù)據(jù),返回值為從響應(yīng) ACK 標志

7、接收 8 位數(shù)據(jù)

三、操作實例
以下代碼為通過調(diào)用上面的基本代碼來實現(xiàn) I2C 通信
三個參數(shù)分比為從機地址,寄存器地址,8 位數(shù)據(jù)

2、讀取 DAC 寄存器的值
兩個參數(shù)分別為從機地址,寄存器地址,返回數(shù)據(jù)為 16 位。這是由于某些器件的硬件設(shè)計,采用 7 位表示寄存器地址,而每個寄存器包含 9 位數(shù)據(jù)。更常見的方式為 8 位寄存器地址,一個寄存器 8 位數(shù)據(jù),這種方式的代碼僅返回 8 位數(shù)據(jù),見代碼 2。
代碼 1,返回 16 位數(shù)據(jù),不常見

代碼 2,返回 8 位數(shù)據(jù)

-
IO腳
+關(guān)注
關(guān)注
0文章
3瀏覽量
6703
原文標題:學(xué)會這個技術(shù),再也不怕芯片不具有硬件I2C模塊了!
文章出處:【微信號:weixin21ic,微信公眾號:21ic電子網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
GPIO模擬I2C總線的驅(qū)動設(shè)計與實現(xiàn)
I2C讀寫時序分析和實現(xiàn)思路
利用IO口模擬I2C時序進而實現(xiàn)I2C通訊的步驟
I2C總線應(yīng)用中的幾個問題
DSP配置I2C通訊(非IO口軟件模擬時序)
STM32 通用GPIO模擬I2C實現(xiàn)
嵌入式內(nèi)核及驅(qū)動開發(fā)-09IIC子系統(tǒng)框架使用(I2C協(xié)議和時序,I2C驅(qū)動框架,I2C從設(shè)備驅(qū)動開發(fā),MPU6050硬件連接
硬件I2C與模擬I2C
經(jīng)過驗證的GPIO模擬I2C時序代碼
ESP 12E I2c基卡的I2C IO卡設(shè)計
軟件模擬I2C從機的實現(xiàn)方法及注意事項
軟件模擬i2c實現(xiàn)io腳時序電路的技巧
評論