推荐答案
测试一下
题目
3 iic与eeprom
参考答案与知识点
参考答案
I2C(Inter-Integrated Circuit)是一种同步、半双工、多主从的串行总线,常用于连接微控制器与EEPROM等外设。本题要求实现I2C与EEPROM的通信,核心考点包括:I2C协议时序、EEPROM设备地址、读写操作流程、应答信号处理、页写入与随机读取。
首先,I2C总线由时钟线SCL和数据线SDA构成,空闲时均为高电平。起始条件:SCL高时SDA由高到低;停止条件:SCL高时SDA由低到高。每个字节传输后,接收方需在第9个时钟周期拉低SDA作为应答(ACK)或保持高作为非应答(NACK)。
EEPROM(如AT24Cxx)的7位设备地址由固定部分(如1010)和3位地址线(A2/A1/A0)组成,第8位为读写控制位(0写,1读)。典型写操作:主机发送起始条件→设备地址+写位→EEPROM应答→主机发送字地址(高字节、低字节)→EEPROM应答→主机发送数据字节→EEPROM应答→停止条件。页写入可连续发送多个数据字节(不超过页面大小),但字地址可自动递增。
读操作有当前地址读、随机读和顺序读。随机读需先执行“伪写”操作:起始→设备地址+写位→字地址→停止;再执行读:起始→设备地址+读位→EEPROM发送数据→主机若应答则继续读,否则发送非应答并停止。
易错点:1)起始/停止条件时序必须严格满足SCL高时SDA变化;2)应答信号必须在SCL低时准备,高时采样;3)字地址字节数取决于EEPROM容量(如8位或16位);4)页写入时地址自动递增不能跨页,否则数据会回绕到页首;5)读操作中,最后一个数据字节主机需发送NACK以指示结束。
Verilog实现时可设计状态机:IDLE→START→SEND_ADDR→WAIT_ACK→SEND_WORD_ADDR→WAIT_ACK→SEND_DATA→WAIT_ACK→STOP等。需注意SCL时钟频率(如400kHz)和占空比,以及上升/下降沿的数据驱动。C代码实现时通常利用MCU的I2C外设或GPIO模拟时序,注意延时单位匹配。
涉及知识点
- I2C协议时序(起始、停止、数据、应答)
- EEPROM设备地址与字地址格式
- 页写入与地址自动递增规则
- 随机读操作的伪写流程
- 非应答(NACK)的发送时机
- 状态机设计在I2C控制器中的应用