由于主机和从机都会给数据线SDA发信号,比如主机先给SDA发送数据后,从机收到数据后发送应答信号将SDA拉低,故SDA类型设定为inout。而DATA设定为inout类型,是起到校验通信的作用(后续的程序将EEPROM_WR读取到的数据发送给signal,与signal当初发送的数据相比较),这时DATA为out类型,而在数据传输过程中,DATA一直扮演in类型。Inout类型是由三态门实现的。link_sda和out_flag分别为EEPROM_WR和EEPROM控制三态门输出的开关。当link_sda打开,out_flag关闭时,EEPROM_WR向SDA传输数据,而EEPROM从SDA接收数据。反之out_flag关闭时,EEPROM_WR通过SDA从EEPROM中读取数据。当均关闭时,SDA就被置为高阻状态。

assign sda1   = (link_head)   ?   head_buf[1]    :  1'b0;
assign sda2   = (link_write)   ?   sh8out_buf[7]   :  1'b0; assign sda3   = (link_stop)   ?   stop_buf[1]    :  1'b0; assign sda4   = (sda1 | sda2 | sda3);
assign SDA   = (link_sda)   ?   sda4       :  1'bz;
assign DATA   = (link_read)   ?   data_from_rm   :  8'hzz;

当link_sda打开(link_sda=1)时,将sda4输出,SDA=sda4。当link_sda=0时,将SDA置高阻态。sda4由三个开关控制,为sda1,sda2,sda3相或的结果,这里将EEPROM_WR的状态分为了三个基本的状态,分别是启动状态,写入状态以及停止状态。在启动时候给SDA一个下降沿,停止时给SDA一个上升沿,传输时,给SDA一个有效数据。其实只需要引入link_sda和link_read,在link_sda打开时,我们都给sda4赋新值即可。

串行时钟的程序,SDK和SCL差半个CLK周期。

always @(negedge CLK)       if(RESET)//同步复位          SCL <= 0;      else             SCL <= ~SCL;//时钟下降沿触发,CLK频率为SCL的两倍

比如传输数据1010,时序图如下:CLK上升沿触发SDK,下降沿触发SCL。1-2为启动时期,SCL为高电平,SDA由高电平下降为低电平;在SCL为高电平时,进行数据的传输;在SCL为低电平时,SDA传输数据改变;命令字节的每一位均要占用一个SCL周期,全部完成后,发出再执行应答或非应答信号,继而停止。

对于主状态机程序,可总结为下图:

最新文章

  1. Object方法equals、hashCode
  2. [Linux] -Docker修改空间大小
  3. 才知道创建数据表的后面int(M)的m居然和存储大小没有关系
  4. ADB server didn&#39;t ACK的解决方法
  5. nyoj CO-PRIME 莫比乌斯反演
  6. Bootstrap日期和时间表单组件运用兼容ie8
  7. POJ 2492 (简单并查集) A Bug&#39;s Life
  8. Error building Player: Win32Exception: ApplicationName=‘xxxxxxxxxxxxxxxxxx//sdk\tools\zipalign.exe&#39; , CommandLine=&#39;4 的解决办法
  9. Android 响应webview中图片的点击事件
  10. Fedora 17 修改GRUB启动菜单顺序
  11. richTextBoxBulletClass
  12. java.lang.NumberFormatException: empty String 错误
  13. Java编程思想——类型信息(RTTI)
  14. 数据结构中的棧在C#中的实现
  15. 同是办公软件,wps和office有什么区别?
  16. 全球领先的redis客户端:SFedis
  17. Java8与传统的日期和时间类详解
  18. UDP广播 MAC地址
  19. Linux报错
  20. 控制反转IOC与依赖注入DI - 理论篇

热门文章

  1. 禁止服务向 eureka 上注册配置文件
  2. CCF 2017-03-1 分蛋糕
  3. windows下安装phpredis扩展
  4. js按钮频繁提交解决方案:
  5. MySQL绿色版mysql-5.7.17-winx64简洁安装教程
  6. git clone github上的项目失败 RPC failed
  7. Linux 常见压缩格式详解
  8. 【转载】 腾讯云通过设置安全组禁止某些IP访问你的服务器
  9. Java虚拟机(五):JVM 类加载机制
  10. python OpenCV使用