arm底层通讯之IIC通讯原理

1、串口和并口

    串口:相当于我们初高中物理学习的串联电路,数据传输是一次一个bit一个bit的传输(uart、IIC、SPI)

    并口:相当于物理电路中的并联电路,数据传输是一次多个bit位的传输

2、同步和异步

    同步:通讯收发双方通讯的过程是严格参考同一通讯时钟完成(IIC、SPI),通讯同步全靠SCL时钟线。

    异步:通讯收发双方在通讯过程中,各自参考各自的时钟完成(uart)。

    举个例子,假设现在在考试,考试规定的时间从9点到10点,时长1个小时:

   (1)同步通讯:假设考场内墙壁上有挂钟,所有考试从考试开始到结束,这个过程时钟参考都是墙壁上的挂钟,考试开始和结束完全都是同步的(因为大家都是看的一个时钟)。

   (2)异步通讯:假设考场内墙壁上没有挂钟,考试开始和结束时间参考都是每个考生自带的手表,那么虽然大家的手表大体时间都一致,但是总会有个别同学手表时间会快或者慢1s的。

3、单工、半双工、全双工

    单工:数据传输方向固定,不可更改,就像单向车道一样,所有在单向车道行驶的车辆,永远只能直行

    半双工:数据传输方向不固定,既能够接收数据,也能够发送数据,但是同一时刻只能接收或者只能发送。就像对讲机一样,按住通讯开关后,你只能说话,对方只能听,等你说完释放开关后,对方按住开关,对方只能说,你也只能听。

    全双工:数据收发可以在同一时刻同时进行。就像手机一样,你在说的同时,也能够听到对方说话,对方在听你说话的同时,也能够说话。

    

4、IIC物理接口

    (1)SCL接口

            时钟线,用来作为IIC通讯过程中的信号同步。

    (2)SDA接口

            数据线,在通讯过程中,完成数据接收和发送,注意在同一时刻只能够发送或者只能够接收,二者不能同时进行,这就是半双工。并且收发都是1位1位进行的。

            正常情况下,SCL和SDA处在高电平时候,表示整个IIC总线处在空闲状态。

5、IIC主从设备

    IIC通讯收发双方是分主从设备的,究竟一个IIC设备是主设备还是从设备,这个不是IIC通信协议规定的,这个是通讯的双方自己规定的。一般一个硬件芯片可以只作为主设备、也可只作为从设备、或者既能够作为主设备也能够作为从设备。

    IIC通讯是支持1主多从、1主1从(1对多、1对1)。那么在1对多时,主设备怎么从多个从设备中选中跟哪个从设备通讯呢?每一个IIC从设备在通讯的时候都需要有一个从设备地址,这个从设备地址(或者说是设备号,一般是)在整个电路板上是唯一的,但是全球不唯一,并且一般在设备生产的时候,由生产商指定。主设备要想从众多个从设备中选中通讯设备,需要知道该从设备地址,然后向总线广播该设备地址,这样每个挂在IIC总线上的从设备都能够收到,他们会各自比较自己的从设备地址,看是否一致,一致表明是和自己通讯,不一致,表示不是和自己通讯,那么就会休眠。

                

                                                                            (图片来自网络)


6、通讯过程

    首先,整个IIC通讯的开始和结束是由IIC主设备控制的,在通讯开始前,SCL和SDA总线都处在高电平空闲状态:


    (1)起始信号

            主设备发送起始信号开始,获得对IIC总线控制,结束总线空闲状态。起始信号实质就是一组组合信号:SCL保持高电平不变,SDA输出低电平。停止信号实质是:SCL保持高电平不变,SDA输出高电平。


    (2)选中IIC从设备

            IIC主设备将要通讯的从设备地址(必须事先查找从设备芯片手册获取好),通过SDA发送出去,然后每个从设备收到从     设备地址后,会各自比对自己的从设备好,识别主设备是不是跟自己通讯,是的话就会发送一个ACK应答信号。

            这里注意,由于IIC通讯属于半双工,同一时刻只能接收或者发送,所以需要先确认是使用发送还是接收,因此在发送从设备地址(从设备地址一共7bit)的时候,需要确定下来,IIC接下来的通讯方向是接收还是发送,因此在发送IIC从设备地址的时候,会将7bit从设备地址左移1bit,在空出来的第0bit表示是发送还是接收(写/读):0-表示发送(写),1-表示接收(读)。

    (3)接收ACK应答信号

            IIC从设备在收到主设备发送来的从设备地址后,会发送一个ACK应答信号(实际就是在发送完7bit的从设备地址+读写标记后的第9个周期,从设备发送一个bit的0),表示从设备知道自己被选中了,只要从设备没有发送一个bit的0,就表示非ACK应答(实质就是一个bit的1或者干脆什么都没发送)

   

    (4)数据传输

            (1)收发数据的时候,都是高bit在前,先发送。

            (2)发送方将要发送的bit,在SCL处在低电平期间

            发送方没发送一个byte的数据,接收方都会回一个ACK信号,表示发送的byte接收到了。

    (5)结束信号

            在通讯结束后,主设备发送停止信号,释放总线。



  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
IIC通讯是指通过IIC(Inter-Integrated Circuit,双线串行总线)接实现设备之间的通信。在Android系统中,IIC通信可以通过使用IIC协议进行数据传输。 IIC通讯可以在Android设备上实现多种应用,比如传感器数据采集、外设控制等。在使用IIC通讯时,Android设备可以作为主设备或从设备。主设备负责控制总线上的数据传输,从设备则负责响应主设备的指令。 Android系统提供了I2C驱动程序和API,使得开发者可以方便地使用IIC通讯功能。通过I2C驱动程序,Android设备可以与各种IIC设备进行通信,包括传感器、触摸屏控制器、通信模块等。开发者可以使用Android提供的I2C API对IIC通信进行配置和控制。 在Android应用中使用IIC通讯时,开发者需要首先确定所需的IIC设备地址和寄存器地址,然后使用I2C API进行设备的初始化和配置。通过读取或写入寄存器的方式,可以实现与IIC设备的数据交互。 在实际应用中,使用IIC通讯需要注意的问题包括地址的设置、数据的传输格式和时序的控制等。此外,由于IIC通讯是串行通信方式,因此传输速率相对较慢,需要根据实际需求进行性能的优化。 总而言之,Android系统提供了方便的API和驱动程序,使得开发者可以轻松地实现IIC通讯功能。使用IIC通讯可以实现Android设备与各种外设的连接与控制,为应用程序的开发提供了丰富的接

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值