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

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

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

軟件模擬i2c實(shí)現(xiàn)io腳時(shí)序電路的技巧

h1654155971.7688 ? 來(lái)源:互聯(lián)網(wǎng) ? 作者:佚名 ? 2017-11-06 09:32 ? 次閱讀

一、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í)布線非常麻煩。壞處是需要寫代碼模擬時(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)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
  • IO腳
    +關(guān)注

    關(guān)注

    0

    文章

    3

    瀏覽量

    6572

原文標(biāo)題:學(xué)會(huì)這個(gè)技術(shù),再也不怕芯片不具有硬件I2C模塊了!

文章出處:【微信號(hào):weixin21ic,微信公眾號(hào):21ic電子網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    GPIO模擬I2C總線的驅(qū)動(dòng)設(shè)計(jì)與實(shí)現(xià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 ?5245次閱讀
    GPIO<b class='flag-5'>模擬</b><b class='flag-5'>I2C</b>總線的驅(qū)動(dòng)設(shè)計(jì)與<b class='flag-5'>實(shí)現(xiàn)</b>

    I2C讀寫時(shí)序分析和實(shí)現(xiàn)思路

    上篇推文對(duì)I2C總線的特性進(jìn)行了介紹和描述。對(duì)于開(kāi)發(fā)者而言,最重要的是編碼I2C的讀寫時(shí)序驅(qū)動(dòng)。本篇推文主要總結(jié)和分享I2C總線主機(jī)端通信的編程實(shí)現(xiàn)
    發(fā)表于 10-01 16:54 ?1484次閱讀
    <b class='flag-5'>I2C</b>讀寫<b class='flag-5'>時(shí)序</b>分析和<b class='flag-5'>實(shí)現(xiàn)</b>思路

    利用IO模擬I2C時(shí)序進(jìn)而實(shí)現(xiàn)I2C通訊的步驟

    模擬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總線應(yīng)用中的幾個(gè)問(wèn)題:i2c上拉電阻阻值的確定,PCB布局布線與抗干擾設(shè)計(jì),軟件模擬I2C時(shí)序
    發(fā)表于 09-13 14:27 ?51次下載
    <b class='flag-5'>I2C</b>總線應(yīng)用中的幾個(gè)問(wèn)題

    軟件模擬I2C總線的C51實(shí)現(xiàn)

    軟件模擬I2C總線的C51實(shí)現(xiàn)
    發(fā)表于 10-13 11:03 ?8次下載
    <b class='flag-5'>軟件</b><b class='flag-5'>模擬</b><b class='flag-5'>I2C</b>總線的<b class='flag-5'>C</b>51<b class='flag-5'>實(shí)現(xiàn)</b>

    I2C總線的結(jié)構(gòu)、工作時(shí)序模擬編程

    I2C總線的結(jié)構(gòu)、工作時(shí)序模擬編程
    發(fā)表于 10-24 14:34 ?13次下載
    <b class='flag-5'>I2C</b>總線的結(jié)構(gòu)、工作<b class='flag-5'>時(shí)序</b>和<b class='flag-5'>模擬</b>編程

    使用51單片機(jī)IO模擬I2C的程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)IO模擬I2C的程序免費(fèi)下載。
    發(fā)表于 08-02 17:34 ?5次下載
    使用51單片機(jī)<b class='flag-5'>IO</b><b class='flag-5'>模擬</b><b class='flag-5'>I2C</b>的程序免費(fèi)下載

    DSP配置I2C通訊(非IO軟件模擬時(shí)序

    TMS320F28377D為例,使用ti公司dsp開(kāi)發(fā)工具ccs10.1配置i2c模塊。寫這篇文章的緣由,因?yàn)槭忻嫔虾芏郉SP其實(shí)內(nèi)部是具有硬件I2C接口的,但由于網(wǎng)絡(luò)上大部分資料和例程都是利用IO
    發(fā)表于 11-29 14:06 ?16次下載
    DSP配置<b class='flag-5'>I2C</b>通訊(非<b class='flag-5'>IO</b>口<b class='flag-5'>軟件</b><b class='flag-5'>模擬</b><b class='flag-5'>時(shí)序</b>)

    STM32 通用GPIO模擬I2C實(shí)現(xiàn)

    STM32 模擬I2C實(shí)現(xiàn)#通用GPIO模擬I2C通信實(shí)現(xiàn)樣例1 GPIO初始化``#ifdef
    發(fā)表于 11-29 15:21 ?28次下載
    STM32 通用GPIO<b class='flag-5'>模擬</b><b class='flag-5'>I2C</b><b class='flag-5'>實(shí)現(xiàn)</b>

    嵌入式內(nèi)核及驅(qū)動(dòng)開(kāi)發(fā)-09IIC子系統(tǒng)框架使用(I2C協(xié)議和時(shí)序,I2C驅(qū)動(dòng)框架,I2C從設(shè)備驅(qū)動(dòng)開(kāi)發(fā),MPU6050硬件連接

    文章目錄I2c協(xié)議和時(shí)序I2c介紹I2c硬件連接I2c總線的信號(hào)I2c總線寫
    發(fā)表于 12-06 14:06 ?17次下載
    嵌入式內(nèi)核及驅(qū)動(dòng)開(kāi)發(fā)-09IIC子系統(tǒng)框架使用(<b class='flag-5'>I2C</b>協(xié)議和<b class='flag-5'>時(shí)序</b>,<b class='flag-5'>I2C</b>驅(qū)動(dòng)框架,<b class='flag-5'>I2C</b>從設(shè)備驅(qū)動(dòng)開(kāi)發(fā),MPU6050硬件連接

    硬件I2C模擬I2C

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

    經(jīng)過(guò)驗(yàn)證的GPIO模擬I2C時(shí)序代碼

    使用STM32的GPIO模擬I2C總線時(shí)序,GPIO設(shè)置為開(kāi)漏模式,SDA和SCK外部必須使用上拉電阻,一般是4.7K。開(kāi)漏模式的好處是,可以同時(shí)讀取輸入電平,而無(wú)需切換輸入/輸出模式。注意事項(xiàng):在
    發(fā)表于 12-28 19:36 ?13次下載
    經(jīng)過(guò)驗(yàn)證的GPIO<b class='flag-5'>模擬</b><b class='flag-5'>I2C</b><b class='flag-5'>時(shí)序</b>代碼

    ESP 12E I2c基卡的I2C IO卡設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《ESP 12E I2c基卡的I2C IO卡設(shè)計(jì).zip》資料免費(fèi)下載
    發(fā)表于 08-15 09:27 ?3次下載
    ESP 12E <b class='flag-5'>I2c</b>基卡的<b class='flag-5'>I2C</b> <b class='flag-5'>IO</b>卡設(shè)計(jì)

    STC單片機(jī)IO模擬I2C(主從)文件資料

    STC單片機(jī)IO模擬I2C(主從)文件資料免費(fèi)下載。
    發(fā)表于 08-29 10:13 ?12次下載

    軟件模擬I2C從機(jī)的實(shí)現(xiàn)方法及注意事項(xiàng)

    具有隨機(jī)性,所以實(shí)現(xiàn)方法不能參照軟件模擬I2C主機(jī)那樣使用單純的軟件查詢狀態(tài)的方法。由于實(shí)際使用時(shí),MCU的固件還會(huì)執(zhí)行其他的操作,所以如果
    的頭像 發(fā)表于 01-17 14:56 ?1.1w次閱讀
    <b class='flag-5'>軟件</b><b class='flag-5'>模擬</b><b class='flag-5'>I2C</b>從機(jī)的<b class='flag-5'>實(shí)現(xiàn)</b>方法及注意事項(xiàng)