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

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

3天内不再提示

如果芯片不具有硬件I2C模块怎么办?

GReq_mcu168 来源:互联网 作者:佚名 2017-10-30 15:59 次阅读

关于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总线的基本用法 I2C总线硬件问题汇总

    一般情况下, i2c 设备焊接没什么问题,按照设备手册一步步来,基本上就顺风顺水能够用起来。如果这么一个简单的东西,有时候想要的结果死活不出来,反复的检查问题的原因,查询解决办法,核查设备的数据手册,甚至发送和接收的每一条命令与数据都知道是什么意思,仍然无法解决问题,那该
    的头像 发表于 12-26 09:33 1022次阅读
    <b class='flag-5'>I2C</b>总线的基本用法 <b class='flag-5'>I2C</b>总线<b class='flag-5'>硬件</b>问题汇总

    基于I2C总线的键盘显示模块设计

    介绍了利用P87LPC76X系列单片机设计的一个键盘显示模块,通过I2C总线与主控芯片相连,具有灵活、控制方便等特点。文中给出了部分硬件设计
    发表于 08-05 14:43 24次下载

    I2C总线接口模块设计

    本实验是基于EasyFPGA030的I2C总线接口模块设计,用EasyFPGA030开发套件通过I2C协议实现对二线制I2C串行EEPROM的读写操作,先把数据写入EEPROM,然后再
    发表于 11-02 17:01 41次下载

    模拟I2C总线多主节点通信原理及实现方法

    摘要 介绍模拟I2C总线的多主节点通信原理,并提出一种新的实现方法。这种采用延时接收比较来实现仲裁的方法,可使不具有I2C接口的普通微控制器(MCU)能够实现模拟I2C总线的多
    发表于 06-18 17:57 5442次阅读
    模拟<b class='flag-5'>I2C</b>总线多主节点通信原理及实现方法

    基于CPLD的I2C总线接口设计

    在电路设计中,I2C总线是比较常用的两线式串行通信方式,大多数的CPU都擅长于并口操作,不具备直接操作I2C总线接口的能力。为了使不具I2C
    发表于 02-12 16:11 95次下载
    基于CPLD的<b class='flag-5'>I2C</b>总线接口设计

    Arduino教程之I2C模块使用教程资料免费下载

    为什么叫I2C模块?和一元硬币差不多大小的一块PCB上放了三个芯片,分管三个功能:时间计算、温度侦测、数据存储。这三个芯片都是通过I2C总线
    发表于 01-22 16:59 9次下载
    Arduino教程之<b class='flag-5'>I2C</b><b class='flag-5'>模块</b>使用教程资料免费下载

    AT89S52单片机并行端口模拟I2C总线协议读写AT24C04的设计

    AT24C04是具有I2C总线接口的EEPROM.大小为512*8bit.单片机AT89S52本身不具有I2C总线结口,所以可编写程序用并行
    发表于 08-14 14:34 2600次阅读

    I2C总线设备的使用方法和硬件问题合集

    ,甚至发送和接收的每一条命令与数据都知道是什么意思,仍然无法解决问题,那该怎么办呢?本文主要针对 i2c 设备,讲解如何解决 i2c 设备主机与从机直接无法正常数据交互的问题,侧重点是针对硬件
    发表于 11-25 11:35 7次下载
    <b class='flag-5'>I2C</b>总线设备的使用方法和<b class='flag-5'>硬件</b>问题合集

    8位PIC单片机上具有硬件协议加速功能的I2C通信

    本技术简介讨论了I2C模块及其特性和基本功能。图1给出了I2C模块的简化框图。
    发表于 04-01 14:20 6次下载
    8位PIC单片机上<b class='flag-5'>具有</b><b class='flag-5'>硬件</b>协议加速功能的<b class='flag-5'>I2C</b>通信

    I2C”的那些坑

    ,核查设备的数据手册,甚至发送和接收的每一条命令与数据都知道是什么意思,仍然无法解决问题,那该怎么办呢? 本文主要针对 i2c 设备,讲解如何解决 i2c 设备主机与从机直接无法正常数据交互
    发表于 11-06 10:05 8次下载
    “<b class='flag-5'>I2C</b>”的那些坑

    STM32的硬件I2C有BUG吗?

    坊间一直流传着一个传说~STM32的硬件I2C设计有BUG,最好不要用,用软件I2C比较靠谱。长久以来,为了不必要的麻烦,我也一直没有用过硬件I2C
    发表于 12-04 14:51 13次下载
    STM32的<b class='flag-5'>硬件</b><b class='flag-5'>I2C</b>有BUG吗?

    硬件I2C与模拟I2C

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

    STM32F 单片机硬件I2C Busy标志导致的I2C卡死的处理办法

    STM32F 单片机硬件I2C Busy标志导致的I2C卡死的处理办法在调试多用户表的时候,发现如果人为短接I2C的SDA或SLK脚后,
    发表于 12-28 19:24 24次下载
    STM32F 单片机<b class='flag-5'>硬件</b><b class='flag-5'>I2C</b> Busy标志导致的<b class='flag-5'>I2C</b>卡死的处理办法

    I2C通信没反应怎么办

    硬件我们经常会遇到各种各样的问题,一些通信接口也会出现,I2C自然也不例外。假如遇到I2C没反应,那么可能会出现这种情况:“软件工程师说,我软件都已经配好了,但是就是读写不到数据,是不是硬件
    的头像 发表于 05-04 11:30 3093次阅读
    <b class='flag-5'>I2C</b>通信没反应<b class='flag-5'>怎么办</b>?

    I2C接口进入Busy状态不能退出怎么办

    电子发烧友网站提供《I2C接口进入Busy状态不能退出怎么办.pdf》资料免费下载
    发表于 08-02 10:03 3次下载
    <b class='flag-5'>I2C</b>接口进入Busy状态不能退出<b class='flag-5'>怎么办</b>