關(guān)于Bit Bang 的解釋:Use software to control serial communication at general-purpose I/O pins,簡單來講就是使用軟件通過 IO 腳去實現(xiàn) I2C 的時序從而使用 I2C 協(xié)議進(jìn)行通信。
這樣做的好處是可以突破硬件上的限制,例如芯片不具有硬件 I2C 模塊,或者硬件 I2C 模塊損壞,又或者使用硬件 I2C 模塊時布線非常麻煩。壞處是需要寫代碼模擬時序,根據(jù)不同的硬件平臺和不同的時鐘頻率,代碼中的部分參數(shù)是不一樣的。
二、代碼分析
以下代碼基于 STM32 系列 MCU
使用軟件模擬 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 標(biāo)志
7、接收 8 位數(shù)據(jù)
三、操作實例
以下代碼為通過調(diào)用上面的基本代碼來實現(xiàn) I2C 通信
1、設(shè)置 DAC 寄存器的值
三個參數(shù)分比為從機(jī)地址,寄存器地址,8 位數(shù)據(jù)
2、讀取 DAC 寄存器的值
兩個參數(shù)分別為從機(jī)地址,寄存器地址,返回數(shù)據(jù)為 16 位。這是由于某些器件的硬件設(shè)計,采用 7 位表示寄存器地址,而每個寄存器包含 9 位數(shù)據(jù)。更常見的方式為 8 位寄存器地址,一個寄存器 8 位數(shù)據(jù),這種方式的代碼僅返回 8 位數(shù)據(jù),見代碼 2。
代碼 1,返回 16 位數(shù)據(jù),不常見
代碼 2,返回 8 位數(shù)據(jù)
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
原文標(biāo)題:學(xué)會這個技術(shù),再也不怕芯片不具有硬件I2C模塊了!
文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
相關(guān)推薦
一般情況下, i2c 設(shè)備焊接沒什么問題,按照設(shè)備手冊一步步來,基本上就順風(fēng)順?biāo)軌蛴闷饋怼?b class='flag-5'>如果這么一個簡單的東西,有時候想要的結(jié)果死活不出來,反復(fù)的檢查問題的原因,查詢解決辦法,核查設(shè)備的數(shù)據(jù)手冊,甚至發(fā)送和接收的每一條命令與數(shù)據(jù)都知道是什么意思,仍然無法解決問題,那該
發(fā)表于 12-26 09:33
?1353次閱讀
介紹了利用P87LPC76X系列單片機(jī)設(shè)計的一個鍵盤顯示模塊,通過I2C總線與主控芯片相連,具有靈活、控制方便等特點。文中給出了部分硬件設(shè)計
發(fā)表于 08-05 14:43
?24次下載
本實驗是基于EasyFPGA030的I2C總線接口模塊設(shè)計,用EasyFPGA030開發(fā)套件通過I2C協(xié)議實現(xiàn)對二線制I2C串行EEPROM的讀寫操作,先把數(shù)據(jù)寫入EEPROM,然后再
發(fā)表于 11-02 17:01
?41次下載
摘要 介紹模擬I2C總線的多主節(jié)點通信原理,并提出一種新的實現(xiàn)方法。這種采用延時接收比較來實現(xiàn)仲裁的方法,可使不具有I2C接口的普通微控制器(MCU)能夠?qū)崿F(xiàn)模擬I2C總線的多
發(fā)表于 06-18 17:57
?5554次閱讀
在電路設(shè)計中,I2C總線是比較常用的兩線式串行通信方式,大多數(shù)的CPU都擅長于并口操作,不具備直接操作I2C總線接口的能力。為了使不具備I2C
發(fā)表于 02-12 16:11
?95次下載
為什么叫I2C模塊?和一元硬幣差不多大小的一塊PCB上放了三個芯片,分管三個功能:時間計算、溫度偵測、數(shù)據(jù)存儲。這三個芯片都是通過I2C總線
發(fā)表于 01-22 16:59
?9次下載
AT24C04是具有I2C總線接口的EEPROM.大小為512*8bit.單片機(jī)AT89S52本身不具有I2C總線結(jié)口,所以可編寫程序用并行
發(fā)表于 08-14 14:34
?2749次閱讀
,甚至發(fā)送和接收的每一條命令與數(shù)據(jù)都知道是什么意思,仍然無法解決問題,那該怎么辦呢?本文主要針對 i2c 設(shè)備,講解如何解決 i2c 設(shè)備主機(jī)與從機(jī)直接無法正常數(shù)據(jù)交互的問題,側(cè)重點是針對硬件
發(fā)表于 11-25 11:35
?7次下載
本技術(shù)簡介討論了I2C模塊及其特性和基本功能。圖1給出了I2C模塊的簡化框圖。
發(fā)表于 04-01 14:20
?6次下載
,核查設(shè)備的數(shù)據(jù)手冊,甚至發(fā)送和接收的每一條命令與數(shù)據(jù)都知道是什么意思,仍然無法解決問題,那該怎么辦呢? 本文主要針對 i2c 設(shè)備,講解如何解決 i2c 設(shè)備主機(jī)與從機(jī)直接無法正常數(shù)據(jù)交互
發(fā)表于 11-06 10:05
?8次下載
坊間一直流傳著一個傳說~STM32的硬件I2C設(shè)計有BUG,最好不要用,用軟件I2C比較靠譜。長久以來,為了不必要的麻煩,我也一直沒有用過硬件I2C
發(fā)表于 12-04 14:51
?26次下載
硬件I2C對應(yīng)芯片上的I2C外設(shè),有相應(yīng)I2C驅(qū)動電路,其所使用的I2C管腳也是專用的,因而效率
發(fā)表于 12-28 19:14
?81次下載
STM32F 單片機(jī)硬件I2C Busy標(biāo)志導(dǎo)致的I2C卡死的處理辦法在調(diào)試多用戶表的時候,發(fā)現(xiàn)如果人為短接I2C的SDA或SLK腳后,
發(fā)表于 12-28 19:24
?24次下載
做硬件我們經(jīng)常會遇到各種各樣的問題,一些通信接口也會出現(xiàn),I2C自然也不例外。假如遇到I2C沒反應(yīng),那么可能會出現(xiàn)這種情況:“軟件工程師說,我軟件都已經(jīng)配好了,但是就是讀寫不到數(shù)據(jù),是不是硬件
發(fā)表于 05-04 11:30
?3284次閱讀
電子發(fā)燒友網(wǎng)站提供《I2C接口進(jìn)入Busy狀態(tài)不能退出怎么辦.pdf》資料免費下載
發(fā)表于 08-02 10:03
?3次下載
評論