固件#01--USB转I2C底层代码和原理

本文介绍了I2C总线的基本概念和工作模式,包括开始/停止信号、读写过程,并详细阐述了如何在STM32上实现USB转I2C的固件,涉及USB虚拟串口通信、硬件I2C和软件模拟I2C的使用。同时提供了相关代码链接供参考。
摘要由CSDN通过智能技术生成

I2C

简介

I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。SDA(串行数据线)和SCL(串行时钟线)都是双向I/O线,接口电路为开漏输出.需通过上拉电阻接电源VCC.

I2C(内部集成电路)总线接口处理微控制器与串行 I2C 总线间的通信。它提供多主模式功
能,可以控制所有 I2C 总线特定的序列、协议、仲裁和时序。它支持标准模式 (Sm)、快速模
式 (Fm) 和超快速模式 (Fm+)。

  • 从模式和主模式
  • 多主模式功能
  • 标准速度模式(高达 100 kHz)
  • 快速模式(高达 400 kHz)
  • 超快速模式(高达 1 MHz)
  • 7 位和 10 位寻址模式

I2C start/stop

  • 开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
  • 结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。

I2C read

  1. Master发送I2C addr(7bit)和w操作0(1bit),等待ACK
  2. Slave发送ACK
  3. Master发送reg addr(8bit),等待ACK
  4. Slave发送ACK
  5. Master发起START
  6. Master发送I2C addr(7bit)和r操作1(1bit),等待ACK
  7. Slave发送ACK
  8. Slave发送data(8bit),即寄存器里的值
  9. Master发送ACK。或者Master发送NACK,要求结束。
  10. 第8步和第9步可以重复多次,即顺序读多个寄存器

I2C write

  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

例子

I2C signal diagram: SDA(green) and SCL(yellow)

        write 0x55 DAC 

USB to I2C

通过USB虚拟串口实现PC与I2C设备进行通信。使用STM32L073xx MCU,硬件I2C和软件模拟I2C,用看门狗检测运行状态。

底层firmware实现代码和硬件电路图见链接:

USB安装成功:

串口助手调试

部分代码main.c


    #include "main.h"
    #include "stm32l0xx_hal.h"
    #include "usb_device.h"
    #include "i2c.h"
    #include "soft_i2c.h"
    #include "stm32l0xx_nucleo.h"
    #include "usbd_cdc_if.h"
    #include "modsel.h"

    /* Buffer use
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值