0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如果芯片不具有硬件I2C模塊怎么辦?

GReq_mcu168 ? 來源:互聯(lián)網(wǎng) ? 作者:佚名 ? 2017-10-30 15:59 ? 次閱讀

關(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總線的基本用法 I2C總線硬件問題匯總

    一般情況下, 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次閱讀
    <b class='flag-5'>I2C</b>總線的基本用法 <b class='flag-5'>I2C</b>總線<b class='flag-5'>硬件</b>問題匯總

    基于I2C總線的鍵盤顯示模塊設(shè)計

    介紹了利用P87LPC76X系列單片機(jī)設(shè)計的一個鍵盤顯示模塊,通過I2C總線與主控芯片相連,具有靈活、控制方便等特點。文中給出了部分硬件設(shè)計
    發(fā)表于 08-05 14:43 ?24次下載

    I2C總線接口模塊設(shè)計

    本實驗是基于EasyFPGA030的I2C總線接口模塊設(shè)計,用EasyFPGA030開發(fā)套件通過I2C協(xié)議實現(xiàn)對二線制I2C串行EEPROM的讀寫操作,先把數(shù)據(jù)寫入EEPROM,然后再
    發(fā)表于 11-02 17:01 ?41次下載

    模擬I2C總線多主節(jié)點通信原理及實現(xiàn)方法

    摘要 介紹模擬I2C總線的多主節(jié)點通信原理,并提出一種新的實現(xiàn)方法。這種采用延時接收比較來實現(xiàn)仲裁的方法,可使不具有I2C接口的普通微控制器(MCU)能夠?qū)崿F(xiàn)模擬I2C總線的多
    發(fā)表于 06-18 17:57 ?5554次閱讀
    模擬<b class='flag-5'>I2C</b>總線多主節(jié)點通信原理及實現(xiàn)方法

    基于CPLD的I2C總線接口設(shè)計

    在電路設(shè)計中,I2C總線是比較常用的兩線式串行通信方式,大多數(shù)的CPU都擅長于并口操作,不具備直接操作I2C總線接口的能力。為了使不具I2C
    發(fā)表于 02-12 16:11 ?95次下載
    基于CPLD的<b class='flag-5'>I2C</b>總線接口設(shè)計

    Arduino教程之I2C模塊使用教程資料免費下載

    為什么叫I2C模塊?和一元硬幣差不多大小的一塊PCB上放了三個芯片,分管三個功能:時間計算、溫度偵測、數(shù)據(jù)存儲。這三個芯片都是通過I2C總線
    發(fā)表于 01-22 16:59 ?9次下載
    Arduino教程之<b class='flag-5'>I2C</b><b class='flag-5'>模塊</b>使用教程資料免費下載

    AT89S52單片機(jī)并行端口模擬I2C總線協(xié)議讀寫AT24C04的設(shè)計

    AT24C04是具有I2C總線接口的EEPROM.大小為512*8bit.單片機(jī)AT89S52本身不具有I2C總線結(jié)口,所以可編寫程序用并行
    發(fā)表于 08-14 14:34 ?2749次閱讀

    I2C總線設(shè)備的使用方法和硬件問題合集

    ,甚至發(fā)送和接收的每一條命令與數(shù)據(jù)都知道是什么意思,仍然無法解決問題,那該怎么辦呢?本文主要針對 i2c 設(shè)備,講解如何解決 i2c 設(shè)備主機(jī)與從機(jī)直接無法正常數(shù)據(jù)交互的問題,側(cè)重點是針對硬件
    發(fā)表于 11-25 11:35 ?7次下載
    <b class='flag-5'>I2C</b>總線設(shè)備的使用方法和<b class='flag-5'>硬件</b>問題合集

    8位PIC單片機(jī)上具有硬件協(xié)議加速功能的I2C通信

    本技術(shù)簡介討論了I2C模塊及其特性和基本功能。圖1給出了I2C模塊的簡化框圖。
    發(fā)表于 04-01 14:20 ?6次下載
    8位PIC單片機(jī)上<b class='flag-5'>具有</b><b class='flag-5'>硬件</b>協(xié)議加速功能的<b class='flag-5'>I2C</b>通信

    I2C”的那些坑

    ,核查設(shè)備的數(shù)據(jù)手冊,甚至發(fā)送和接收的每一條命令與數(shù)據(jù)都知道是什么意思,仍然無法解決問題,那該怎么辦呢? 本文主要針對 i2c 設(shè)備,講解如何解決 i2c 設(shè)備主機(jī)與從機(jī)直接無法正常數(shù)據(jù)交互
    發(fā)表于 11-06 10:05 ?8次下載
    “<b class='flag-5'>I2C</b>”的那些坑

    STM32的硬件I2C有BUG嗎?

    坊間一直流傳著一個傳說~STM32的硬件I2C設(shè)計有BUG,最好不要用,用軟件I2C比較靠譜。長久以來,為了不必要的麻煩,我也一直沒有用過硬件I2C
    發(fā)表于 12-04 14:51 ?26次下載
    STM32的<b class='flag-5'>硬件</b><b class='flag-5'>I2C</b>有BUG嗎?

    硬件I2C與模擬I2C

    硬件I2C對應(yīng)芯片上的I2C外設(shè),有相應(yīng)I2C驅(qū)動電路,其所使用的I2C管腳也是專用的,因而效率
    發(fā)表于 12-28 19:14 ?81次下載
    <b class='flag-5'>硬件</b><b class='flag-5'>I2C</b>與模擬<b class='flag-5'>I2C</b>

    STM32F 單片機(jī)硬件I2C Busy標(biāo)志導(dǎo)致的I2C卡死的處理辦法

    STM32F 單片機(jī)硬件I2C Busy標(biāo)志導(dǎo)致的I2C卡死的處理辦法在調(diào)試多用戶表的時候,發(fā)現(xiàn)如果人為短接I2C的SDA或SLK腳后,
    發(fā)表于 12-28 19:24 ?24次下載
    STM32F 單片機(jī)<b class='flag-5'>硬件</b><b class='flag-5'>I2C</b> Busy標(biāo)志導(dǎo)致的<b class='flag-5'>I2C</b>卡死的處理辦法

    I2C通信沒反應(yīng)怎么辦?

    硬件我們經(jīng)常會遇到各種各樣的問題,一些通信接口也會出現(xiàn),I2C自然也不例外。假如遇到I2C沒反應(yīng),那么可能會出現(xiàn)這種情況:“軟件工程師說,我軟件都已經(jīng)配好了,但是就是讀寫不到數(shù)據(jù),是不是硬件
    的頭像 發(fā)表于 05-04 11:30 ?3284次閱讀
    <b class='flag-5'>I2C</b>通信沒反應(yīng)<b class='flag-5'>怎么辦</b>?

    I2C接口進(jìn)入Busy狀態(tài)不能退出怎么辦

    電子發(fā)燒友網(wǎng)站提供《I2C接口進(jìn)入Busy狀態(tài)不能退出怎么辦.pdf》資料免費下載
    發(fā)表于 08-02 10:03 ?3次下載
    <b class='flag-5'>I2C</b>接口進(jìn)入Busy狀態(tài)不能退出<b class='flag-5'>怎么辦</b>