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