已完成:
EEPROM(IIC协议):长期保存,小容量
UART串口(RS-232、RS-485)
待学习:
DDR:高速,断电丢失
SD卡
FLASH缓存(SPI协议):大容量,快速访问,常用于程序存储
FT232H(USB to FIFO/JTAG/SPI/IIC)
UART串口
UART 串口包括了RS232、RS499、RS423、RS422 和RS485 等接口标准规范和总线标准规范,因此串口广泛应用于嵌入式、工业控制等领域。
RS232 为全双工,单端传输,容易产生共模干扰,通信距离短(15m),只允许一对一通信
RS485 为半双工,差分传输,抗噪声干扰性好,通信距离长(最高3km),允许连接多个收发器
单端传输是指在发送或接收过程中,用信号线对地线的电压值来表示逻辑“0”和“1”。
差分传输使用两根信号线来传输一路信号,这两根信号线上传输的信号幅值相等,极性相反,用它们的差值来表示逻辑“0”和“1”
UART串口(RS-232)
RS232需要两根信号线来实现,一根用于串口发送(TX, transmit),另外一根负责串口接收(RX, receive)(对于器件自己来说)。如下图所示,需要交叉连接
此外由于使用单端传输,还需要一根地线
奇偶校验:
接收UART 读取数据帧后,将计数值为1 的位,检查总数是偶数还是奇数。
如果奇偶校验位为0(偶数奇偶校验),则数据帧中的1 (逻辑高位)总计应为偶数。
如果奇偶校验位为1(奇数奇偶校验),则数据帧中的1 (逻辑高位)总计应为奇数。
当奇偶校验位与数据匹配时,UART 认为传输未出错。
数据发送从低到高依次发送。
波特率即每秒传输的位数(bit),常见的有有9600,19200,115200等。常用符号“Baud”表示,其单位为“波特每秒”(Bps)
使用verilog实现时序图:
接收模块:(时钟域同步>起始信号>起始位>数据为0>...>数据位7>停止位(1))
每次接收数据在一个数据周期的中间,这时信号最稳定
发送模块:(起始信号>起始位(0)>数据为0>...>数据位7>停止位(1))
IIC
IIC协议:Inter-Integrated Circuit(集成电路总线)
由Philips 半导体公司(现在的NXP 半导体公司)设计
由数据线SDA 和时钟线SCL 构成通
被控器件均并联在总线上,通过器件地址(SLAVE ADDR,具体可查器件手册)识别。
IIC 器件一般采用开漏结构与总线相连,I2C_SCL 和I2C_SDA 均需接上拉电阻
当总线空闲时,这两条线路都处于高电平状态;连到总线上的任一器件输出低电平,都将使总线拉低
I2C 总线支持多主和主从两种工作方式
整体时序图:
当SDA被拉低之后,SCL会以一定频率在0,1之间切换,即时钟
串行时钟线SCL 为低电平状态时,SDA 允许改变传输的数据位(1 为高电平,0 为低电平)
在SCL 为高电平状态时,SDA 要求保持稳定,相当于一个时钟周期传输1bit 数据
经过8 个时钟周期后,传输了8bit 数据,即一个字节(Byte)
第八个时钟末,主机释放SDA,等待从机应答
如果在第9个周期内拉低则应答成功,否则视为发送失败
第九个周期末,从机释放总线,继续等待主机拉低
从机地址发送:
每个I2C 器件都有一个器件地址,有些I2C 器件的器件地址是固定的,而有些I2C 器件的器件地址由一个固定部分和一个可编程的部分构成
进行数据传输时,主机首先向总线上发出开始信号,对应开始位S
然后按照从高到低的位序发送器件地址,一般为7bit
第8bit 位为读写控制位R/W,该位为0 时表示主机对从机进行写操作,当该位为1 时表示主机对从机进行读操作,然后接收从机响应
数据地址发送:
发送完第一个字节(7 位器件地址和一位读写控制位)并收到从机正确的应答后,就开始发送字地址(Word Address),根据容量,可能需要一个或两个字节
数据收发
读写控制位R/W为0:主机读取(read)本地数据,发送给从机并写入
单次写:
连续写:
只有部分I2C 设备支持页写操作
不能发送超过一页的单元容量的数据(如AT24C64 的一页的单元容量为32Byte)
读写控制位R/W为1:向主机写入(write)数据,从机读取数据并发送
读数据有三种方式:当前地址读、随机读和连续读
当前地址读:指在一次读或写操作后发起读操作
随机读:先进行一次虚写(Dummy Write)操作写入地址,再重新发送起始信号进行当前地址读操作
连续读:(当前地址连续读&随机地址连续读)从机发送数据后主机进行应答(拉低SDA),告诉从机继续发送数据
当前地址连续读:
随机地址连续读: