美文网首页
I2C相关__181224+26

I2C相关__181224+26

作者: ppzbreeze | 来源:发表于2018-12-28 09:40 被阅读0次

I2C简介

  1. 这是一种用于数据交互的协议,广泛用于芯片,模组,及涉及到的诸多外设;
  2. 由两根线构成,一根数据,一根时钟,需要二者相互配合才行,具体的协议下面会介绍;
  3. 在具体配置的时候,可以由软件模拟,也可以由硬件直接设置;
  4. 具体代码的位置基本也在hal文件夹中,也是通过操作寄存器来实现的;

交互过程

I2C的通信是基于master(主机)和slave(从机)来进行的,其中从机不能主动发起请求,只能应答主机或不应答主机

  1. Master发起START
  2. Master发送I2C addr(7bit)和w操作0(1bit),等待ACK(发送控制指令
  3. Slave发送ACK(完成第一次握手
  4. Master发送reg addr(8bit),等待ACK(发送具体操作地址
  5. Slave发送ACK(完成第二次握手
  6. Master发送data(8bit),即要写入寄存器中的数据,等待ACK(发送数据
  7. Slave发送ACK
  8. 第6步和第7步可以重复多次,即顺序写多个寄存器
  9. Master发起STOP

PS:

  1. 其中6.7步可以重复多次,多次发送数据,也可以没有,
  2. 一个例子,在之前的一次硬件实现I2C驱动硬件的过程中,具体使用的第一次握手位置为0x3c,即slave的寄存器地址,第二次握手使用的操作指令为0x40和0x00,分别代表传输数据和命令;

协议

详见I2C主从交互协议

代码相关

  • 硬件方式实现
  1. 首先需要在电路板中确定I2C的实际管脚是哪个,可以查询芯片的管脚,一般是芯片直接接出来的;
  2. 在找到对应的位置后,在代码中找到对应的标识,通过extern等多种方式进行操作;
  3. 具体的操作方式还是要看hal文件夹里的内容,如果没有的话需要找更底层的寄存器操作函数,应该是位于regs文件夹下,如果没有就在附近找一找;
  4. 这里其实最大的问题就是如何将步骤匹配到相应的代码上,因为模型一般是有的,如果没有具体的使用实例可以参考,那就只能先多实践一下,此处在具体处理中便是将六个步骤找到了代码中具体的位置,然后找到了整体的初始化函数,再进行后续操作;
  5. 硬件实现的优点是稳定性和效率高(其实这个不是很好验证,只是直觉,但是应该是对的);劣势是需要硬件环境较为充裕;
  6. 需要注意的地方,
    (1)对寄存器地址的查询,及后续函数在使用时候的格式是否正确;
    (2)对I2C的连接的几步,在代码中具体体现位置的理解(这个其实才是经验体现的地方;
    (3)在编译环境下可能有对相关端口进行设置的 地方,这个要格外注意,添加项目文件的时候要把target文件夹也包含进去,保证在搜索相关位置的时候能够充分了解到代码编译和最后生成bin文件的时候会对指定目标(例如相关I2C端口,GPIO接口)做了哪些处理;
    (4)如果出现问题,要有较为直接的手段来判断问题的所在,一个是代码中的查BUG,一个是硬件环境下对电平变化的直接测试,需要用到示波器或协议测试仪等等
  • 软件模拟实现
  1. 当设备的硬件已经被占用的情况下,不能实现硬件直接设置的I2C,需要软件的配合,一种方案是使用GPIO模拟;
  2. 首先需要选定一个GPIO接口,然后是使用该接口生成我们需要的波形,类似协议中描述的;
  3. 将该GPIO接口通过底层函数生成模仿I2C波形的电压参数,这里需要仔细看,有一定的简单算法来实现,而且具体到波形的话,此处软件模拟的一般都是比较平滑的,类似正弦波,但是硬件直接生成的就不同了,通常是直上直下的;
  4. 优点的话就是不占用实际的硬件接口,而且相对较为复杂的硬件环境,软件实现更加可控;
  5. 具体代码添加部分
    (1)需要选定一个模拟的端口;
    (2)需要在初始化的时候,通常是Init函数

相关文章

  • I2C相关__181224+26

    I2C简介 这是一种用于数据交互的协议,广泛用于芯片,模组,及涉及到的诸多外设; 由两根线构成,一根数据,一根时钟...

  • I2C协议浅谈

    导语:此为个人对I2C总线协议的一点总结,如若想深度了解I2C总线协议可参考相关文档 I2C英文权威手册 I2C中...

  • kernel I2C总线驱动

    I2C总线驱动# I2C体系结构## I2C核心提供I2C总线驱动和设备驱动的注册、注销方法 I2C总线驱动是对I...

  • i2c

    彻底搞懂I2C总线(一)什么是I2C?什么是I2C总线?什么是I2C规范[https://www.163.com/...

  • 1.10 嵌入式

    今天老师讲了I2C相关知识,I2C串行总线有两根信号线,一根是数据线SDA,另一根是时钟线SCL。各设备的时钟线S...

  • 1月10日

    今天学的I2C相关知识,I2C串行总线有两根信号线,一根是数据线SDA,另一根是时钟线SCL。各设备的时钟线SCL...

  • 基于高通平台的TP调试

    1、硬件原理 TP 相关的引脚有 SCL、SDA、VREG_L10、INT、RST,SCL、SDA用于I2C通讯,...

  • Ginkgo USB-I2C适配器

    典型应用: - I2C总线设备,芯片控制、调试; - I2C接口传感器测试; - I2C存储器EEPROM数据读写...

  • 11/21

    今天学习了I2C接口和23008以及23S08相关方面的知识,内容很多,需要慢慢了解

  • OSError: [Errno 121] Remote I/O

    打开raspberryPi I2C功能,连接上I2C通信的扩展板即可

网友评论

      本文标题:I2C相关__181224+26

      本文链接:https://www.haomeiwen.com/subject/ufztlqtx.html