2019-12-23

串行是嵌入式过程中最常用的通信方式,除之前的I/O接口串行以外,还有I2C即串行总线。在嵌入式中,这种方式主要用于板级之间的硬件通信,即通信的成员基本都在板子内,而非作为工业总线。

同步半双工总线,

同步:有时钟线

半双工:能实现接收与发送,但同一时间内只能接收或发送。这种双引脚的方式,非常有利于节省资源。I2C通信过程中,并不是时钟线的某一点对应采样,今天主要就是介绍通信过程中的情况。

I2C在通信过程中主要是一主多从形式,也存在多主多从。

当两根总线都处于高电平,则通信的设备都处于空闲状态。所以两个通信总线都有上拉电阻,保证上电之初所有设备处于空闲状态。

I2C在嵌入式开发过程中非常常用,温湿度传感器、触摸屏等都可以挂在同一总线

传输协议:

起始:SCL高电平,SDA下降沿,

校验:

引入概念:握手

应答与非应答方式,

应答:主设备在I2C通信过程中占统治地位,所以可以使主设备发送数据,从设备应答,每发送完一帧都要进入空闲状态,即“主动释放”,以便进行应答,而非应答方式的通信则不需要拉低信号线。

非应答:从设备在硬件有问题或者不在线时,会产生非应答信号,从而主设备可以停止发送信号,另外,从向主发期间,主设备可以主动产生非应答信号,从而结束本次通信。

结束:SCL高电平,SDA上升沿



通信过程:

1.主设备产生下降沿,开始通信;

2.寻找通信目标的通信从设备:发送7位的从设备地址,加一位数据的传输方向(最低位0代表主向从发,1代表从向主发),

3.校验

4.结束信号




通信过程中,在时钟线的低电平进行数据线的电平变换,以避免通信期间出现结束信号,时钟线高电平期间锁存。




串行通信过程中,有两种数据构成:

LSB:低位在前

MSB:高位在前

I2C是采用高位在前的方式构成数据,所以发送数据时要从高位开始发送。即每一个数据的读取要与0x80然后向左移位

设备号(设备地址):

设备内地址:给出首地址或者从默认0地址开始存储后,每一个数据储存之后都会进行指针自走。



存储设备E2PROM/EEPROM:

存储分支:

刚有计算机模型时,尚未有集成电路,使用纸带进行存储,纸带打孔之后不能再改,称为只读存储器,即ROM

PROM可改的

EPROM可擦写的,开窗单片机,用光特性进行擦除

E2PROM可擦写,利用电特性进行擦写,例如一卡通里面的卡芯片都是使用E2PROM存储量小,造价高

ROM系列的存储皆是掉电不丢失,

随着半导体器件出现,有了可以改写的RAM随机性存储设备(读、写)

SRAM:静态随机性存储器,其实就是半导体硬件,写入数据后只要还上电,就一直不变,造价高

DRAM:动态随机性存储器,以电容的方式存储数据位,不能一直保持有效,需要定时刷新,即充电

SDRAM

DDR:最新的,目前台式机常用的内存

RAM存储掉电丢失,所以一般制作内存。



以上统称NORflash



块设备,都会有坏块和物理磨损,存储设备一般称为块设备,擦除过程以块为单位进行操作。



此外,还有NANflash,有坏块管理,稍微复杂一些。



端序:

多字节的数据类型存在端序概念,比如int型,32位存储,类似于高位在前和低位在前,不过是把字节之间进行排序,高位在低地址,叫做大端序,高位在高地址,叫做小端序,即看起来跟通常情况下相似,即为大端序。

端序问题一般在跨平台时产生,比如ARM一般是小端序,Interl一般大端序。



我们的机器上,片内有一个flash和一个SRAM

片外有一个SPIflash、一个SDRAM

底板上还有一个E2PROM








写:

起始

+控制字节(7位设备号+1位传输方向0)+应答(1位)

+从设备内地址(8位)+应答

+数据(8位)+应答(1位)

+数据+应答

结束信号


读:

起始

+控制字节(7位设备号+1位传输方向0)+应答(1位)

+从设备内地址(8位)+应答

(对同一个设备调整方向时,此时可以省略结束位)

+起始位

+控制字节(7位设备号+1位传输方向1)+应答

+从设备发送数据(8位)+主设备应答

+从设备发送数据+主设备应答

+主设备发送非应答信号

+结束信号





利用I2C实现芯片和E2PROM通信,

所需资源:

1.     设备号:1010000即0x50,所以握手时发送的是10100000即0xA0,若接收则发送0xA1

2.     怎么读:

3.      怎么写:

管脚:I2C1

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • I^2C :内部集成总线(板级之间的内部相互通信) 同步半双工总线 只能在同一时间接收/发送(两条线节省硬件资源)...
    姜帆_e5bb阅读 890评论 0 0
  • 1.IIC(内部集成电路总线) 串行总线 板级之间硬件相互通信 是一种同步半双工总线 有一条时钟线(SDK);S...
    吴海燕_Jill阅读 1,137评论 0 0
  • I2C为内部集成总线(同步半双工,有时钟线,一个时间段内只能单向的接收或者发送) 双工两线上接两个上拉电阻(使两条...
    轻哨微风阅读 1,020评论 0 0
  • 2019-12-23 今天学习 I^2C :内部集成总线,用于板级之间的串行通信,同步半双工总线 传输协议: 起...
    13e6982014e1阅读 1,924评论 0 0
  • 总线 计算机的各个功能部件通过总线连接在一起构成完整的计算机系统,总线是多个系统功能部件之间进行数据传送的公共通路...
    罗蓁蓁阅读 10,414评论 0 10