一、Bit Bang
關(guān)于 Bit Bang 的解釋:Use software to control serial communication at general-purpose I/O pins,簡(jiǎn)單來(lái)講就是使用軟件通過(guò) IO 腳去實(shí)現(xiàn) I2C 的時(shí)序從而使用 I2C 協(xié)議進(jìn)行通信。
這樣做的好處是可以突破硬件上的限制,例如芯片不具有硬件 I2C 模塊,或者硬件 I2C 模塊損壞,又或者使用硬件 I2C 模塊時(shí)布線非常麻煩。壞處是需要寫(xiě)代碼模擬時(shí)序,根據(jù)不同的硬件平臺(tái)和不同的時(shí)鐘頻率,代碼中的部分參數(shù)是不一樣的。
二、代碼分析
以下代碼基于 STM32 系列 MCU
使用軟件模擬 I2C 的步驟如下:
1、設(shè)置 GPIO 管腳
設(shè)置兩個(gè)管腳作為 SCL 和 SDA,例如 GPIOA1 和 GPIOA2
2、SCL時(shí)鐘周期
3、附加設(shè)置
這里主要是使用宏定義模擬函數(shù)
4、I2C 啟動(dòng)
5、I2C停止
6、發(fā)送 8 位數(shù)據(jù),返回值為從響應(yīng) ACK 標(biāo)志
7、接收 8 位數(shù)據(jù)
三、操作實(shí)例
以下代碼為通過(guò)調(diào)用上面的基本代碼來(lái)實(shí)現(xiàn) I2C 通信
1、設(shè)置 DAC 寄存器的值
三個(gè)參數(shù)分比為從機(jī)地址,寄存器地址,8 位數(shù)據(jù)
2、讀取 DAC 寄存器的值
兩個(gè)參數(shù)分別為從機(jī)地址,寄存器地址,返回?cái)?shù)據(jù)為 16 位。這是由于某些器件的硬件設(shè)計(jì),采用 7 位表示寄存器地址,而每個(gè)寄存器包含 9 位數(shù)據(jù)。更常見(jiàn)的方式為 8 位寄存器地址,一個(gè)寄存器 8 位數(shù)據(jù),這種方式的代碼僅返回 8 位數(shù)據(jù),見(jiàn)代碼 2。
代碼 1,返回 16 位數(shù)據(jù),不常見(jiàn)
代碼 2,返回 8 位數(shù)據(jù)
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
原文標(biāo)題:學(xué)會(huì)這個(gè)技術(shù),再也不怕芯片不具有硬件I2C模塊了!
文章出處:【微信號(hào):weixin21ic,微信公眾號(hào):21ic電子網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
相關(guān)推薦
I2C總線簡(jiǎn)單方便,是我們經(jīng)常使用的一種總線。但有時(shí)候我們的MCU沒(méi)有足夠多的I2C控制器來(lái)實(shí)現(xiàn)我們的應(yīng)用,所幸我可以使用普通的GPIO引腳來(lái)模擬低速的
發(fā)表于 12-14 14:19
?5398次閱讀
上篇推文對(duì)I2C總線的特性進(jìn)行了介紹和描述。對(duì)于開(kāi)發(fā)者而言,最重要的是編碼I2C的讀寫(xiě)時(shí)序驅(qū)動(dòng)。本篇推文主要總結(jié)和分享I2C總線主機(jī)端通信的編程實(shí)現(xiàn)
發(fā)表于 10-01 16:54
?1848次閱讀
模擬I2C時(shí)序進(jìn)而實(shí)現(xiàn)I2C通訊的。給很多想學(xué)習(xí)硬件I2C通訊的小伙伴帶來(lái)了困難。下面先介紹一下
發(fā)表于 01-24 08:22
I2C總線應(yīng)用中的幾個(gè)問(wèn)題:i2c上拉電阻阻值的確定,PCB布局布線與抗干擾設(shè)計(jì),軟件模擬I2C時(shí)序
發(fā)表于 09-13 14:27
?51次下載
軟件模擬I2C總線的C51實(shí)現(xiàn)
發(fā)表于 10-13 11:03
?8次下載
I2C總線的結(jié)構(gòu)、工作時(shí)序和模擬編程
發(fā)表于 10-24 14:34
?13次下載
本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)IO模擬I2C的程序免費(fèi)下載。
發(fā)表于 08-02 17:34
?5次下載
TMS320F28377D為例,使用ti公司dsp開(kāi)發(fā)工具ccs10.1配置i2c模塊。寫(xiě)這篇文章的緣由,因?yàn)槭忻嫔虾芏郉SP其實(shí)內(nèi)部是具有硬件I2C接口的,但由于網(wǎng)絡(luò)上大部分資料和例程都是利用IO口
發(fā)表于 11-29 14:06
?16次下載
STM32 模擬I2C實(shí)現(xiàn)#通用GPIO模擬I2C通信實(shí)現(xiàn)樣例1 GPIO初始化``#ifdef
發(fā)表于 11-29 15:21
?29次下載
文章目錄I2c協(xié)議和時(shí)序I2c介紹I2c硬件連接I2c總線的信號(hào)I2c總線寫(xiě)
發(fā)表于 12-06 14:06
?17次下載
硬件I2C對(duì)應(yīng)芯片上的I2C外設(shè),有相應(yīng)I2C驅(qū)動(dòng)電路,其所使用的I2C管腳也是專用的,因而效率要遠(yuǎn)高于
發(fā)表于 12-28 19:14
?81次下載
使用STM32的GPIO模擬I2C總線時(shí)序,GPIO設(shè)置為開(kāi)漏模式,SDA和SCK外部必須使用上拉電阻,一般是4.7K。開(kāi)漏模式的好處是,可以同時(shí)讀取輸入電平,而無(wú)需切換輸入/輸出模式。注意事項(xiàng):在
發(fā)表于 12-28 19:36
?13次下載
電子發(fā)燒友網(wǎng)站提供《ESP 12E I2c基卡的I2C IO卡設(shè)計(jì).zip》資料免費(fèi)下載
發(fā)表于 08-15 09:27
?3次下載
STC單片機(jī)IO口模擬I2C(主從)文件資料免費(fèi)下載。
發(fā)表于 08-29 10:13
?14次下載
具有隨機(jī)性,所以實(shí)現(xiàn)方法不能參照軟件模擬I2C主機(jī)那樣使用單純的軟件查詢狀態(tài)的方法。由于實(shí)際使用時(shí),MCU的固件還會(huì)執(zhí)行其他的操作,所以如果
發(fā)表于 01-17 14:56
?1.2w次閱讀
評(píng)論