关于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
•1312次阅读
介绍了利用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
•5541次阅读
在电路设计中,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
•2718次阅读
,甚至发送和接收的每一条命令与数据都知道是什么意思,仍然无法解决问题,那该怎么办呢?本文主要针对 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
•14次下载
硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C管脚也是专用的,因而效率
发表于 12-28 19:14
•81次下载
STM32F 单片机硬件I2C Busy标志导致的I2C卡死的处理办法在调试多用户表的时候,发现如果人为短接I2C的SDA或SLK脚后,
发表于 12-28 19:24
•24次下载
做硬件我们经常会遇到各种各样的问题,一些通信接口也会出现,I2C自然也不例外。假如遇到I2C没反应,那么可能会出现这种情况:“软件工程师说,我软件都已经配好了,但是就是读写不到数据,是不是硬件
发表于 05-04 11:30
•3254次阅读
电子发烧友网站提供《I2C接口进入Busy状态不能退出怎么办.pdf》资料免费下载
发表于 08-02 10:03
•3次下载
评论