本帖最后由 ajzh 于 2023-5-16 10:48 编辑
#技术资源# #每日话题# #申请原创# IIC通讯实验 1、实验概述 本实验通过两块LKS32MC081的demo板进行IIC通讯的发送和接收实验。实验使用P1.10作为SCL时钟信号线,P1.11作为SDA数据信号线,将两块081的核心板对应的P1.10与P1.11用杜邦线进行连接。由于IIC通讯需要进行上拉,因此需要在程序中对P1.10与P1.11进行开启上拉。081系列的IIC通讯不使用DMA进行搬运时需要利用IIC的中断进行判断,实现IIC的数据传输。
2、IIC通讯特点
图2.1 IIC总线物理拓扑图 在物理连接上分别由 SDA(串行数据线)和 SCL(串行时钟线)及上拉电阻组成。通信原理是通过对 SCL和 SDA线高低电平时序的控制,来产生 IIC 总线协议所需要的信号进行数据的传递。在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平,否则无法输出高电平。 IIC 总线接口连接微控制器和串行 IIC 总线。它提供多主机功能,控制所有IIC总线特定的时序、协议、仲裁和定时。支持标准和快速两种模式。 IIC有以下特点: ① IIC是半双工,而不是全双工; ② IIC是真正的多主机总线,(对比SPI在每次通信前都需要把主机定死,而IIC可以在通讯过程中,改变主机),如果两个或更多的主机同时请求总线,可以通过冲突检测和仲裁防止总线数据被破坏; ③ 起始和终止信号都是由主机发出的,连接到I2C总线上的器件,若具有IIC总线的硬件接口,则很容易检测到起始和终止信号; ④ 在起始信号后必须发送一个7位从机地址+1位方向位,用“0”表示主机发送数据,“1”表示主机接收数据; ⑤ 每当主机向从机发送完一个字节的数据,主机总是需要等待从机给出一个应答信号,以确认从机是否成功接收到了数据; ⑥ 起始信号是必需的,结束信号和应答信号,都可以不要。 注:实际使用中,一般是单片机作为主机,其它器件作为从机,单片机先向器件发送信息表示要读取数据,之后转变传输方向,器件发送数据到单片机。 图2.2 IIC传输时序图 如图2.2所示为IIC基本的传输时序图,空闲状态时SCL与SDA均为高电平,在主机发出START信号后,SCL根据设定的波特率产生时钟信号,SDA首先输出7位从机地址+1位方向位,然后进行8位数据位的传输。需要注意的是,在一个字节传输的 8 个时钟后的第 9 个时钟期间,从机必须回送一个应答位(ACK)给发送器,每个字节后会跟随一个 ACK 信号。ACK bit使得接收者通知主机已经成功接收数据并准备接收下一个数据。当从机响应NACK信号后,判定为传输完成,主机产生STOP信号,完成一组信号的传输。
|
IIC原理以及代码粘贴详细合理,文章整体结构清晰,分页设计巧妙,但是以后可以使用代码工具粘贴代码,阅读性会更好。