I2C模块
2022/2/11 23:44:38
本文主要是介绍I2C模块,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
I2C总线是一种双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。
主器件通过串行数据(SDA)线和串行时钟 (SCL)线连接到其他从器件,每个器件都有一个唯一的地址识别(无论是微控制器、LCD 驱动器、存储器或键盘接口),除了LCD 驱动器(只能作为接收器)其他器件都可以作为数据的发送器和接收器。
I2C模块主要包含:
一个串行接口:一个数据引脚(SDA)和一个时钟引脚(SCL)
数据寄存器和FIF0:暂时保存SDA引脚与CPU之间传递的接收数据和发送数据
控制和状态寄存器。
外围总线接口:用于CPU访问I2C模块寄存器和FIF0s。
时钟同步器:用来使I2C输入时钟(由DSP时钟源产生)和SCL引脚的时钟同步,并且使数据发送器与不同的主机时钟速度同步
对输入到I2C模块的时钟进行分频的预定标器。
SDA和SCL引脚上的噪声滤波。
用来处理I2C模块和其它主器件的裁决问题的裁决器。
中断产生逻辑,用以向CPU发送中断信号。
FIF0中断产生逻辑:以便在I2C模块中接受数据或发送数据时能够同步访问FIF0。
时钟产生源:
当外部时钟源发射信号时DSP接受到这个信号后产生一个频率可编程的I2C输入时钟。
I2C输入时钟为CPU时钟,在I2C内部被两倍以上分频后产生I2C模块时钟和主机时钟。
模块时钟决定I2C以何种频率工作。I2C模块的可编程分频器通过对输入时钟来产生模块的时钟。为了与所有I2C协议时钟频率匹配,模块时钟必须配置在7-12MHz之间。分频器必须在I2C模块被复位时进行配置。当IRS从0变成1时所分频的频率才能有效。IRS=1时改变IPSC的值不起作用。
I2C模块操作
1.数据状态:只有当SCL是低电平时,数据线SDA自身的高低电平状态才能改变。
2.输入和输出电平:主设备为每个数据传输产生一个时钟脉冲。因为连接到I2C总线的设备采用的技术标准不同,所以逻辑0(低电平)和逻辑1(高电平)是不固定的,与设备的VDD值有关。
3.操作模式:如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件寻址从器件.然后主机接收从器件发送的数据,最后由主机终止接收过程。
4.I2C模块的起始和停止条件:当I2C模块作为主机时,就由这个模块来控制起始和停止。
当SCL为高电平,SDA数据线产生由高到低的跳变时,表示起始条件产生。主机通过产生这样这样的条件来表明数据传送开始
当SCL为高电平,SDA数据线产生由低到高的跳变时,表示停止条件产生。主机通过产生该条件表明数据传送停止结束。
5.串行数据格式:I2C模块可以传输1-8位的数据。SDA数据线上每一位的维持时间相当于SCL的一个脉冲。传输数据时,都是高有效位字节开始传送。发送和接受数据的个数没有限制。
每个数据传输结束后,主机可以再次驱动一个起始信号。有了这个功能,主机就可以和多个从机通信,不需要通过驱动停止信号来放弃总线控制权。
6.时钟同步。SCL的“线与”特性指的是在SCL上首先产生低电平的设备会控制其它的设备。这个由高到低的跳变,强制其它设备的时钟发生器开始其低电平周期。并且只要有设备的时钟信号为低则SCCL一直保持为低电平。必须等到SCL被释放后其它设备才能结束它们的低电平周期,开始其高电平周期。
SCL上产生的同步信号中,低电平周期的长度由最慢的设备决定,高电平周期的长度则是由最快的设备决定。
免费领,单片机入门到高级进阶学习攻略(附教程+工具)
想要一起学习单片机的朋友,回复入门,有惊喜,加入我们,就可以与导师一对一互动,快速成长
这篇关于I2C模块的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-25【机器学习(二)】分类和回归任务-决策树(Decision Tree,DT)算法-Sentosa_DSML社区版
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享