0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

软件模拟i2c实现io脚时序电路的技巧

h1654155971.7688 来源:互联网 作者:佚名 2017-11-06 09:32 次阅读

一、Bit Bang

关于 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 位数据

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • IO脚
    +关注

    关注

    0

    文章

    3

    浏览量

    6572

原文标题:学会这个技术,再也不怕芯片不具有硬件I2C模块了!

文章出处:【微信号:weixin21ic,微信公众号:21ic电子网】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    GPIO模拟I2C总线的驱动设计与实现

    I2C总线简单方便,是我们经常使用的一种总线。但有时候我们的MCU没有足够多的I2C控制器来实现我们的应用,所幸我可以使用普通的GPIO引脚来模拟低速的
    发表于 12-14 14:19 5095次阅读
    GPIO<b class='flag-5'>模拟</b><b class='flag-5'>I2C</b>总线的驱动设计与<b class='flag-5'>实现</b>

    I2C读写时序分析和实现思路

    上篇推文对I2C总线的特性进行了介绍和描述。对于开发者而言,最重要的是编码I2C的读写时序驱动。本篇推文主要总结和分享I2C总线主机端通信的编程实现
    发表于 10-01 16:54 1328次阅读
    <b class='flag-5'>I2C</b>读写<b class='flag-5'>时序</b>分析和<b class='flag-5'>实现</b>思路

    利用IO模拟I2C时序进而实现I2C通讯的步骤

    模拟I2C时序进而实现I2C通讯的。给很多想学习硬件I2C通讯的小伙伴带来了困难。下面先介绍一下
    发表于 01-24 08:22

    I2C总线应用中的几个问题

    I2C总线应用中的几个问题:i2c上拉电阻阻值的确定,PCB布局布线与抗干扰设计,软件模拟I2C时序
    发表于 09-13 14:27 51次下载
    <b class='flag-5'>I2C</b>总线应用中的几个问题

    软件模拟I2C总线的C51实现

    软件模拟I2C总线的C51实现
    发表于 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'>实现</b>

    I2C总线的结构、工作时序模拟编程

    I2C总线的结构、工作时序模拟编程
    发表于 10-24 14:34 13次下载
    <b class='flag-5'>I2C</b>总线的结构、工作<b class='flag-5'>时序</b>和<b class='flag-5'>模拟</b>编程

    使用51单片机IO模拟I2C的程序免费下载

    本文档的主要内容详细介绍的是使用51单片机IO模拟I2C的程序免费下载。
    发表于 08-02 17:34 5次下载
    使用51单片机<b class='flag-5'>IO</b><b class='flag-5'>模拟</b><b class='flag-5'>I2C</b>的程序免费下载

    DSP配置I2C通讯(非IO软件模拟时序

    TMS320F28377D为例,使用ti公司dsp开发工具ccs10.1配置i2c模块。写这篇文章的缘由,因为市面上很多DSP其实内部是具有硬件I2C接口的,但由于网络上大部分资料和例程都是利用IO
    发表于 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'>时序</b>)

    STM32 通用GPIO模拟I2C实现

    STM32 模拟I2C实现#通用GPIO模拟I2C通信实现样例1 GPIO初始化``#ifdef
    发表于 11-29 15:21 28次下载
    STM32 通用GPIO<b class='flag-5'>模拟</b><b class='flag-5'>I2C</b><b class='flag-5'>实现</b>

    嵌入式内核及驱动开发-09IIC子系统框架使用(I2C协议和时序I2C驱动框架,I2C从设备驱动开发,MPU6050硬件连接

    文章目录I2c协议和时序I2c介绍I2c硬件连接I2c总线的信号I2c总线写
    发表于 12-06 14:06 17次下载
    嵌入式内核及驱动开发-09IIC子系统框架使用(<b class='flag-5'>I2C</b>协议和<b class='flag-5'>时序</b>,<b class='flag-5'>I2C</b>驱动框架,<b class='flag-5'>I2C</b>从设备驱动开发,MPU6050硬件连接

    硬件I2C模拟I2C

    硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C管脚也是专用的,因而效率要远高于
    发表于 12-28 19:14 80次下载
    硬件<b class='flag-5'>I2C</b>与<b class='flag-5'>模拟</b><b class='flag-5'>I2C</b>

    经过验证的GPIO模拟I2C时序代码

    使用STM32的GPIO模拟I2C总线时序,GPIO设置为开漏模式,SDA和SCK外部必须使用上拉电阻,一般是4.7K。开漏模式的好处是,可以同时读取输入电平,而无需切换输入/输出模式。注意事项:在
    发表于 12-28 19:36 13次下载
    经过验证的GPIO<b class='flag-5'>模拟</b><b class='flag-5'>I2C</b><b class='flag-5'>时序</b>代码

    ESP 12E I2c基卡的I2C IO卡设计

    电子发烧友网站提供《ESP 12E I2c基卡的I2C IO卡设计.zip》资料免费下载
    发表于 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>卡设计

    STC单片机IO模拟I2C(主从)文件资料

    STC单片机IO模拟I2C(主从)文件资料免费下载。
    发表于 08-29 10:13 12次下载

    软件模拟I2C从机的实现方法及注意事项

    具有随机性,所以实现方法不能参照软件模拟I2C主机那样使用单纯的软件查询状态的方法。由于实际使用时,MCU的固件还会执行其他的操作,所以如果
    的头像 发表于 01-17 14:56 1w次阅读
    <b class='flag-5'>软件</b><b class='flag-5'>模拟</b><b class='flag-5'>I2C</b>从机的<b class='flag-5'>实现</b>方法及注意事项