I2C和串口有什么区别?难倒资深工程师的“简单问题”,瞬间读懂
燚智能硬件开发实战派-前期回顾
晶体和晶振是一个东西么? 不是!
觉得我们讲的有用么?欢迎关注本头条号。
智能硬件开发工程师实战知识,用你看得懂的方式讲解!
每日更新,头条号首发!
I2C有什么用?
I2C,又叫IIC。标准写法应当是I2C,读作“I方C”。因为小编是纯手工敲键盘,这里就偷个懒,都写成I2C了。
具体含义网上一搜一大把,这里就不讲这些生涩的概念了,直入主题:
两根线、双向传输数据、一对多传输数据、速度不快、通用性很强。
适用场景:各种传感器、小IC、小MCU等。控制指令和小数据量的传输。
这张图里面没有I2C。小编图好看随便配的 >_<
I2C和UART的区别?
说到两根线的数据传输方式,大家可能会对串口(UART)最熟悉,TX、RX两根线即可传输数据,常用的跑到115200bps的速度毫无问题。
那么为什么还需要I2C这样的同样是两根线的传输方式呢?
I2C能够1对多,UART只能1对1。因此I2C又叫I2C总线。
I2C接口能够用软件模拟来扩充接口,UART则不行。
I2C接口带有同步时钟,对时钟稳定性要求远没有UART那么高。
由此可见,I2C存在的最大原因在于简单且灵活性高。
例如一个主控要接5个外设,但是通常的主控都不可能有5个UART口。如果用UART就需要硬件扩展。
但是用I2C的话,只需要1组I2C接口即可。即使没有硬件I2C接口,也可以有软件模拟I2C的源代码可以调用。(I2C源码网上随便就可以搜到很多)。嵌入式开发初学者都可以在一周之内自己独立写一套出来。
I2C使用范例
单独输出传输
这个没什么好讲的,硬件连好了,软件配置好了,数据就可以顺利传输了。
这种连接方式,仅限于CPU需要控制外设,而外设永远不会自己主动发数据给CPU 的情况。如果外设需要主动要求发数据个CPU,需要采用下面一种方式。
带中断的数据传输
为什么要加中断?
I2C只能由CPU(主机)去找外设(从机)索取数据,外设不能主动发送数据给CPU。
但是CPU不能定期去问外设“你有没有数据要发给我?”,这样耗CPU的计算资源,也耗电,且无法进入睡眠状态。
因此需要外设有办法通知CPU,“我有数据要发了”。I2C配合的中断信号就是这个作用。外设有数据要发了,先发个中断给CPU,CPU再来通过I2C读取外设想要发过来的数据。
对于低功耗应用的场景、能够触发的外设场景,都需要这么来设计。例如电容触摸屏,平时CPU是休眠的,点击一下就唤醒系统。再例如G-Sensor运动传感器,一旦被晃动了就唤醒CPU。
一个控制多个设备:
如何一对多?
一根I2C总线上挂载多个设备,那么岂不是CPU发个什么数据,所有的外设都可以看得到?
是的,就这样子的。只不过CPU先会发一个地址,所有的外设都会收到这个地址。这个地址就好比外设的名字。叫了你了,你就答应,没叫你就别答应。
地址总共能有127个,不同的I2C接口的外设的地址通常是不会重复的。
对于如果我需要在一根I2C总线上挂载多个相同的外设呢?例如上面的一组I2C控制几个灯控IC。这种情况下,IC厂家通常都会未卜先知,知道大家可能会一口气用好几个,在IC上预留地址脚 ,通过不同的拉高和拉低的状态,把设备的I2C的地址配置成不同的值。
通过地址选择脚,选择不同的I2C地址
I2C协议简单介绍
讲了,这么多,硬件工程师们知道什么是I2C以及怎么使用了,但是还是不能愉快的和软件工程师交流,因为还不知道传输的详情。
I2C时序图
具体的I2C工作时序,记住这么几条就可以理解了:
只能由主机(Master)发起数据传输请求,从机(Slave)只能被动响应。
通常MCU是主机,外围设备是从机。
主机和从机都不说话的时候,两根线都是高电平。(被外部上拉电阻拉高的)
主机先发送地址(Address),I2C上挂载的所有的设备都会收到这个地址,只有这个地址和自己的地址一致,才会响应(ACK)。
主机发送地址的时候顺带还会说本次操作是读还是写(RW)。从机收到这个读写信号,如果是读,从机就准备好要被读取的数据等着主机来读,如果是写,从机就做好接收数据的准备。
从机响应了,主机才会继续发数据。如果没有人响应,要么是从设备都挂了,要么是地址不对,总之就是有问题。
如果上面的都ok了,接下来就是按部就班的传输数据了。
I2C实测波形
硬件工程师和软件工程师手把手蹲在示波器旁边数I2C波形,在调试过程中经常看得到。
最后提一个思考题,这个问题很多资深工程师都没有想过!
如果两个外设都是一个地址,会怎么样?
就好比一个课堂上,两个同学都叫小明,老师说:小明,去把窗户打开。
是一个小明有反应?还是两个有反应?还是都没有反应?
燚智能硬件开发网--周教授大讲堂 (四个火,读 Yi)
以前有更多更精彩的内容呢!
MOS管实战应用案例讲解,绝非老师教你的那么用的!
原理图英文缩写大全,丢掉规格书,快速看懂原理图
肖特基二极管三个核心参数,看完就会用了!
USB转串口IICI2CSPIUART适配器可编程开发板TYPE接口
电源
供电: VIN3.0~10V,可 USB 接口供电,即插即用。
工作电压: VWK3.3V 或者 VIN, 跳线切换。
电源输出: VIN、 3.3V 及 VWK 供其它设备使用,最高 500mA 输出能力。
功耗:
无操作自动休眠,休眠电流低至 5uA。
通讯速率(非 IO 模拟, 温补晶振, 时钟精准)
UART: 通讯速率 1200~921600bps(1.2kbps~0.9Mbps)。
I2C/SMBus: 通讯速率 0.33kHz~1.8MHz, 可搜索总线上所有从设备。
SPI: 通讯速率 2.75kHz~5.5MHz, 从模式,可设置时钟极性和相位。
1-Wire: 通用读写, 可连接多种型号 1-Wire 设备(芯片)。
扩展功能
板载 IIC 接口 AT24CxxEEPROM 芯片、 SHT 温湿度传感器芯片、 16 位差分 AD 采集。
板载 SPI 接口 GD25Qxx 芯片,可用于 SPI 接口测试或者存储用户数据。
板载 1-Wire 接口 DS18B20 温度传感器/DS28EC20/2431/2502EEPROM 芯片
IIC 屏幕专用接口,连接 OLED12832 屏幕。
外形尺寸
30mm*45mm*3mm(PCB 尺寸,不包含 USB 连接器)
工作温度: -40~85℃
其它
驱动程序: WinXP~Win10、 WinCE、 Android
全球唯一识别码
公开 PCB 原理图及测试源码
支持 Keil 编程,在线仿真,最多 10 个 GPIO,电压比较器, PWM内置专用透传协议,无需开发即可实现复杂外设数据交互
应用领域
USB 与串行口物理层透明通讯
串行接口转发器
电子设备固件 ISP 升级
EEPROM、 FLASH 读写器、数据存储器
串行接口芯片、设备测试、 Demo 运行器
相关问答
同步串口协议SSI(包括SPI)和I2C的区别?
总线上每一个设备都有一个独一无二的地址,根据设备它们自己的能力,它们可以作为发射器或接收器工作。多路微控制器能在同一个I2C总线上共存。I2C是多主控...
STM32F103V系列的ARM处理芯片有5个串口?
一般我们指的串口就特指的是USART,你上面的UARST应该是写错了。SPI,I2C可以统称为串行通信。STM32F103系列最多好像只有3个串口,具体对应的位置,在对应芯片技...
arm的串口有哪些?
ARM处理器的串口主要分为两类:标准串口和高级串口。标准串口包括UART(UniversalAsynchronousReceiver/Transmitter)和USART(UniversalSy...
eg8001芯片管脚功能?
EG8001芯片是一款USB集成电路芯片,具有以下管脚功能:1.VDD:芯片供电正极2.VSS:芯片供电地3.XTAL1/CLKIN:晶震器输入引脚4.XTAL2/CLKOUT:晶震器输出引脚...
单片机的串口,怎样与电脑串口联接?-ZOL问答
可以通过PC的串口和USB口与单片机连接,之间都需要电平转换处理直接连是不行的!电脑串口是标准RS232电平单片机端txdrxd是TTL电平必须转换才行请看...
apb1和apb2的区别?
APB1和APB2的区别主要是三点,分别是所对接的端口不通、工作速度状态不同、以及外设不同,具体区别如下如下:1、所对接的端口不同:APB1负责DA,USB,SPI,I2C...
python如何接收plc的信号?
Python可以通过PLC的通信接口来接收PLC的信号。PLC通常具有多种通信接口,例如串口、I2C、SPI等,这些接口可以通过编程语言如Python进行访问。以下是一些获取P...
8080mcu和6800mcu的区别?,锦锐MCU价格如何??
[回答]I2C总线是内部总线,用来连接内部系统内的芯片。比如mcu和存储器、键盘现实芯片、ad转换等等。串口通信是用来和系统外部的设别通信的。比如设备和设...
传感器单片机通信原理?
传感器单片机通信是指通过传感器将感应到的物理量转变为数字信号后,通过串口、I2C、SPI等通信协议传输到单片机,然后对信号进行采集、处理和分析。其中,传感...
摩迪威和摩枭的区别是什么?
2.接口:摩迪威提供了多种传感器接口,包括I2C、串口和数字/模拟引脚,使其能够与各种类型的传感器进行通信。而摩枭主要提供了电机驱动接口和扩展引脚,用于连...