一、实验目的 二、实验原理 IIC 总线上每一个设备都有唯一地址,通过“唯一地址”进行寻址通信。并且数据传输过程中还必须有应答信号,所以 SDA 数据线是双向的。 传输速率:标准模式下可达 100Kbit/s,快速模式下可达 400Kbit/s,高速模式下可达3.4Mbit/s 2.IIC 时序实现 时序要求: 本实验采用 400Kbit/s 的传输速率,所以 SCL 的频率应设置为 400KHz,切占空比为 50%, SCL 变化点为 scl_cnt 计数器的“half”处和“full”处; 3.IIC 读写操作流程 Device Address Byte 主设备每传输 8bit 数据需释放 SDA,接收来自从设备的 ACK 应答信号。 Device Address Byte 的最低位若为“0”表示“写”,若为“1”则表示“读”。 第三个字节是写数据的字节。其中 Device Address Byte 的 A2、A1和 A0与硬件连接相关: 因此,开发板上的 EEPROM 的 device ID 为:7’b1010000; Random Read: 读操作的过程中,先进行 Dummy Write,此部分与写操作类似,不管读或者写,主机首先是要找到从机,然后指明要读或者写的地址。 Dummy Write 之后,主设备再发送一次从设备 Device Address Byte,最低位为“1”表示读,Data Word 表示读取从设备数据。 IIC 的读写操作流程可总结为: 4.IIC 读写操作流程的状态机实现 默认 IDLE 状态,若接收到开始触发信号,则跳转到 Start 状态; Start 状态下,在计数器计到 full_cycle 跳转到 send_byte 状态; send_byte 状态下,发送完 8bit 数据时跳转到 s_ack 状态,接收从设备的应答信号; s_ack 状态下:若为写操作,byte 数未发送完成(ID+ADDR+DATA),则跳转到 send_byte 继续发送下一 reve_byte 状态下,若接收完 8bit 数据则跳转到 rack 状态; rack 状态下,若需要接收多 byte 数据,为接收完所有 byte 则需要跳转回 reve_byte 状态,若接收完成所有 byte,接收完 ack 应答信号后跳转到 stop 状态; Stop 状态下,完成 IIC 传输结束标志后跳转到 IDLE 空闲状态; IIC 读写操作流程的状态机实现,verilog 代码详见参考工程。 4 .实验源码 KEY1 按下表示复位,KEY2 按下后 wr 信号为 1,表示写;KEY3 按下后 wr 信号为 0,表示读;KEY4 按下表示 IIC 写/读触发开始。 三、实验现象 读数据:按下 KEY3 再按一次 KEY4,从上一次写入的地址中读出数据,LED 灯的状态为写入的数据 8'b10101010。 更多实验教程敬请关注! |
路过,看看。 |
扫一扫,分享给好友
电子发烧友网
电子发烧友开云(中国)官方