一.IIC通信协议
1.1 IIC通信协议简介
- IIC:(Inter-Integrated Circuit)即集成电路总线,是一种两线
式串行总线,由 PHILIPS 公司开发,用于连接微控制器及其外围设备。
多用于主机和从机在数据量不大且传输距离短的场合下的主从通信 - IIC 总线由数据线 SDA 和时钟线 SCL 构成通信线路,既可用于
发送数据,也可接收数据,是一种半双工通信协议。
1.2物理层
-
我们需要了解的信息如下
1.IIC支持多主机多从机
2.IIC有两条线,一条SCL串行时钟线,用于数据收发同步;一条SDA串行数据线,用来表示数据
3.每个连接到IIC总线的设备都有一个唯一的地址(ID),主机可以通过地址与不同的从机建立连接
4.IIC 总线通过上拉电阻接到电源。当 IIC 设备空闲时,设备会输出高阻态,当所有设备都空闲,都输出高阻态时,由上拉电阻把 IIC总线拉成高电平。
5.IIC总线有仲裁机制:当多个主机同时发起传输时,触发仲裁机制,最终只给一个主机授权。
6.具有三种传输模式,每种传输模式对应的传输速率不同
传输模式 传输速率 标准模式 100kbit/s 快速模式 400kbit/s 高速模式 3.4Mbit/s
1.3协议层
-
SCL/SDA时序如下(单字节)
-
我们分段理解一下(其实可以用上课提问的过程类比:老师为主机,学生为从机)
1.空闲状态:SCL和SDA都为高电平
2.起始位:在SCL为高电平时,SDA被拉低(这就相当于老师说“要开始抽人提问了”,学生们这时做好被抽问的准备)
3.数据传输:SCL低电平时数据变化,SCL高电平时采样(主机进行数据读写,IIC协议规定,数据传输时先发送寻址字节,即7位从机地址+0/1。其中0表示主机写,1表示主机读。寻址字节发送完成后才是数据字节)(主机发送寻址字节时就好比是老师抽到一个学生,后续发送写入的数据就可以看作是问题,那么主机读回的数据就可以看作是学生回答的答案)
4.应答位:发送端每发送一个字节就需要由接收端反馈一个应答信号。应答位为0表示成功接收(ACK),应答位为1时表示没有成功接收(NO ACK)(类比到提问就可以理解为学生是否听清了老师的问题/老师是否收到了学生的回答)
5.停止位:在SCL为高电平时,SDA拉高,回到空闲状态(这就相当于老师说“提问到此结束")
1.4写操作传输格式
1.5读操作传输格式
1.6先写后读传输格式
二.EEPROM简介(手册分析)
-
EEPROM的全称是“电可擦除可编程只读存储器”,即Electrically Erasable Programmable Read-Only Memory。本项目中使用的是24LC04B
-
器件ID(可以视为是7’b1010000加上一位的0/1)
-
单字节写
-
页写
-
当前地址读
-
随机地址读
-
顺序地址读
-
24LC04B存储空间包括2个block,每个block中包含256个字节
三.部分代码分析
3.1模块设计
3.2接口模块
- 状态转移
状态解析(针对主机):
状态转移条件:
- 根据传输速率计算传输1bit需要的时间
- 命令
- 三态门
-
考察输出
-
考察输入
3.3control模块
- 状态转移
状态转移条件
-
字节计数器复用
-
task
-
写入数据
四.源码
- 包括源码,仿真(这里仿真用到了仿真模型)
https://download.csdn.net/download/weixin_67803687/88368712