注意:Link1D 产生是COM2口,是和CDC串口不同的,它只是一个普通uart2口,波特率,停止位,校验位什么的都要注意
(COM9) USB-CDC2-UART2, Link要来和PC通讯,
(Link1) USB-HID-UART1 要来不断电下载程序
我们在试验箱上找串口2:
这样我可以保证大家都能顺利完成这个串口2+SPI+存储芯片GD25r40C的实验
源程序也放上来:
由于SPI读写存储芯片W25X40程序,调试过程中遇到打印语句printf()没有执行结果的现象,我们先放一下,
今天我们先继续学习 第三十集下:软件模拟IIC
1.UC介绍
2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。
IIC总线简单来说就是一根线来控制时钟(SCL)和一个线来发送数据(SDA)。两个线按照一定的传输协议来进行传输数据。由于只有一根线来读写数据,也就意味着同一时间只能有一个发送设备。(这里我们将产生时钟信号的设备称为主机,一条IIC总线同一时间只会有一个主机)
注意要4.7K的上拉电阻:
任意选一个脚接一根线来控制时钟(SCL)和另一个脚接一个线来发送数据(SDA)
存储芯片IIC,实际只有1根数据线SDA,每个存储芯片都有唯一的器件地址
同一时间只能有一个发送设备。(这里我们将产生时钟信号的设备称为主机,一条IIC总线同一时间只会有一个主机)
下面我们看看写入的顺序:
主机发送启动信号→发送7位地址+1位W写命令(形成寻址写命令字)→主机等待芯片应答“A”→主机收到应答“A”后发送写入数据1→主机收到应答“A”后发送写入数据2 ……….主机收到应答“A”后发送写入数据N→主机收到应答“A”后发送停止信号“P” 主机在检测到总线为“空闲状态”(即SDA、SCL 线均为高电平)时,发送一个启动信号"S”,开始一次通信的开始主机接着发送一个命令字节。该字节由 7 位的外围器件地址和 1 位读写控制位R/W组成(此时RW=0为写)相对应的从机收到命令字节后向主机回馈应答信号ACK(ACK=0)主机收到从机的应答信号后开始发送第一个字节的数据从机收到数据后返回一个应答信号 ACK主机收到应答信号后再发送下一个数据字节当主机发送最后一个数据字节并收到从机的 ACK 后,通过向从机发送一个停止信号P结束本次通信并释放总线。从机收到P信号后也退出与主机之间的通信。空闲的意思就是说SDA和SCL都是高电平。应答信号ACK(ACK=0)表示从芯片写入成功。
接着看主机读数据:
主机发送启动信号后,接着发送命令字节(其中R/W=1)对应的从机收到地址字节后,返回一个应答信号并向主机发送数据主机收到数据后向从机反馈一个应答信号从机收到应答信号后再向主机发送下一个数据当主机完成接收数据后,向从机发送一个“非应答信号(ACK=1)”,从机收到ACK=1的非应答信号后便停止发送主机发送非应答信号后,再发送一个停止信号,释放总线结束通信。
常见的I2C模块:
学会了I2C的驱动,我们使用这些模块就很方便:
我们就用常见的I2C模块中的最后的EEPROM存储模块24C02来入手!
首先我们要知道器件地址位只有7位,最大就是127,就是说最多接127个模块
看下图:
因为发送的第一个字节,8位的最后一位,有特殊用处:它=0,表示是往EEPROM的芯片24C02写入.
它=1,表示是从EEPROM的芯片24C02读出. 就是说这是读写功能位:
接着看读出的顺序信号动作