模拟I2C协议学习点滴之程序相关定义
由于主机和从机都会给数据线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周期,全部完成后,发出再执行应答或非应答信号,继而停止。
对于主状态机程序,可总结为下图:
模拟I2C协议学习点滴之程序相关定义的更多相关文章
- 模拟I2C协议学习点滴之原理框架
I2C是一种串行总线协议. 目前几种常用的串行总线有UART.SPI和I2C协议.UART协议的总线只有两条,发送(Transmit:TX)和接收(Receive:RX),没有时钟信号,这就要求两位数 ...
- 模拟I2C协议学习点滴之复习三极管、场效应管
晶体三极管分为NPN和PNP型两种结构形式,除了电源极性的不同工作原理是大致相同的.对于NPN管,它是由2块N型半导体夹着一块P型半导体所组成的,发射区与基区之间形成的PN结称为发射结,而集电区与基区 ...
- MQTT 协议学习: 总结 与 各种定义的速查表
背景 经过几天的学习与实操,对于MQTT(主要针对 v3.1.1版本)的学习告一段落,为了方便日后的查阅 本文链接:<MQTT 协议学习: 总结 与 各种定义的速查表> 章节整理 MQTT ...
- I2C协议学习笔记
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/wzt_007/article/detai ...
- 学习笔记一:I2C协议学习和Verilog实现
////////////////////////////////////////////////// //clk = 20 MHz ,一个周期50ns //sck = 100 kHz (scl) ,一 ...
- 模拟telnet协议C语言客户端程序
首先要了解telnet协议,一下两篇blog给了我初步的思路 https://www.cnblogs.com/liang-ling/p/5833489.html 这篇有比较基础的介绍 以及IAC命令含 ...
- GPIO实现I2C协议模拟(1)
最近需要用GPIO模拟I2C协议,如果是在Linux下面比较简单,但在Windows下面,是否有没Linux那么简单了. 索性自己对I2C协议还有一些了解,翻了SPEC并结合示波器量出的实际信号分析, ...
- MSP430的IO口模拟I2C总线对AT24C25进行读写程序
功能: 实现MSP430口线模拟I2C总线协议与24C04通信. ** 描述: 主系统工作时钟为12MHz,I2C工 ...
- STM8S 模拟I2C程序
STM8S的硬件I2C还是存在问题,不敢贸然使用. 于是决定用模拟I2C. #define SCL PE_ODR_ODR1 #define SDA PE_ODR_ODR2 #define SDAM P ...
随机推荐
- maven配置阿里镜像
在conf\settings.xml 在<mirrors>里面添加 <mirror> <id>nexus-aliyun</id> < ...
- VK Cup 2017 - Round 1 (CDE)
771C Bear and Tree Jumps 大意: 给定树,每步能走到距离不超过$k$的任意点,记$f(s,t)$为$s$到$t$的最少步数,求$\sum\limits_{s<t}f(s, ...
- Python 操作MySQL 数据库
Python 操作 MySQL 数据库 Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. Python 数据库接口支持非常多的 ...
- ASP.NET MVC 5 伪静态之支持*.html路由
参考了例子 到自己实践还是有不少坑要踩,这种文章,你说它好还是不好呢 注意这里的版本是ASP.NET MVC 5 首页的URL为 http://localhost:58321/index.html ...
- R_数据操作_初级_03
数据的输入:详见(http://cran.r-project.org/doc/manuals/R-data.pdf下载的R Data Import/Export手册②) 1.键盘输入:使用edit() ...
- Scrapy 安装与使用
Scrapy的安装: 当前环境win10,python_3.6.4,64bit.在命令提示符窗口运行pip install Scrapy,出现以下结果: building 'twisted.test. ...
- 1+X证书学习日志——盒模型
## padding的作用: 控制子元素和父元素之间的位置关系 padding设置方法: ...
- Ipython 和 python 的区别
IPython是一个python交互shell,它比默认的python shell更易于使用.它支持自动变量完成.自动缩进.bash shell命令,并且内置了许多有用的函数和函数. IPython是 ...
- day01-02
- iOS UIView视图的图层控制
1.添加视图 insertSubview:atIndex: //放在子视图数组的具体索引位置 insertSubview:aboveSubview: //某个子视图前面 insertSubvi ...