0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用PIC16 MSSP模块进行从机 I2C 通信

454398 来源:eeweb 作者:eeweb 2021-06-20 18:03 次阅读

一些中档增强型内核 PIC16 单片机器件具有主同步串行端口(Master Synchronous Serial Port,MSSP)。MSSP 模块可用于实现 I2CTM 或 SPI 通信协议。在本应用笔记中,将介绍 I2C 从协议的基础知识。然后读者应该更好地了解 MSSP 模块以及它如何用于 I2C 总线上的从机通信。还将提供代码示例以帮助读者将模块实现到他们自己的设计中。

I2C 总线规范

内部集成电路 (I2C) 总线是由 Philips® Inc. 开发的广泛使用的行业标准,用于在集成电路(例如串行 EEPROM 或其他微控制器)之间传输数据。设备在主/从环境中通信,其中主设备始终发起通信,从设备通过寻址进行控制。I2C 总线可以有一个或多个主设备和一个或多个从设备。主设备是在总线上发起数据传输的设备,负责生成总线上使用的串行时钟。任何寻址的设备都被视为从设备。I2C 协议支持 7 位或 10 位寻址模式。从 MSb 开始,一次执行 8 位数据传输。

总线的物理接口由两条双向开漏线组成,一条线用于串行时钟(SCL),另一条线用于串行数据(SDA)。每条线路都需要一个上拉电阻来为线路提供电压。将线拉到地面被认为是逻辑低点,而让线浮动被认为是逻辑高点。当总线空闲时,SDA 和 SCL 均为逻辑高电平。数据传输速率在标准模式下高达 100 kbits/s,在快速模式下高达 400 kbits/s,在快速模式 Plus 下高达 1 Mbits/s,或在高速模式下高达 3.4 Mbits/s模式。在时钟的高电平期间,SDA 线上的数据必须是稳定的。SDA 线上的任何变化只能在 SCL 线上的时钟信号为低电平时发生。为每个传输的数据位生成一个时钟脉冲。

I2C 规范将启动条件定义为 SDA 线从高电平变为低电平状态,而 SCL 线为高电平。启动条件始终由主机生成,表示总线从空闲状态转换为活动状态。I2C 规范规定在开始时不会发生总线冲突;但是,如果 MSSP 模块在将 SDA 线置为低电平之前对其进行采样,则可能会发生总线冲突。

停止条件是 SDA 线从低到高状态的转换,而 SCL 线为高。在停止有效之前,必须至少出现一个 SCL 低电平时间。因此,如果 SDA 线变为低电平,然后再次变为高电平,而 SCL 线保持高电平,则仅检测到启动条件。

poYBAGDPEjaATH0AAABzdY8A3nE945.png

图 1 I2C 启动和停止条件

只要停止有效,重新启动或重复启动就有效。如果主机希望在终止当前传输后保持总线,它可以发出重新启动。Restart 对从机具有与 Start 相同的效果,重置所有从机逻辑并准备它在地址中计时。主站可能想要寻址同一个或另一个从站。这对于许多 I2C 外设很有用,例如非易失性 EEPROM 存储器,其中 I2C 写操作和读操作连续完成。在这种情况下,写操作指定要读取的地址,读操作获取数据字节。由于主设备在将内存地址写入设备后并没有释放总线,因此执行一个Restart序列来读取内存地址的内容。

pYYBAGDPEkCAPloyAABc3vsaifo630.png

图 2 I2C 重启条件

在 10 位寻址从机模式下,主机需要重启才能将数据从寻址的从机中取出。一旦从设备被完全寻址,匹配高地址字节和低地址字节,主设备就可以发出重启并发送设置了 R/W 位的高地址字节。然后从逻辑将保持时钟并准备输出数据。在 10 位模式下与 R/W 清除完全匹配后,设置并保持先前​​匹配标志。在停止条件之前,具有 R/W 清除或高地址匹配的高地址失败。

编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6001

    文章

    43973

    浏览量

    620822
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1346

    浏览量

    120816
  • PIC16
    +关注

    关注

    2

    文章

    152

    浏览量

    34747
收藏 人收藏

    评论

    相关推荐

    使用两片ADU360进行I2C通信,当与进行通信时,无法进入I2C中断是为什么?

    问题说明:使用两片ADU360进行I2C通信,主机使用IO口模拟方式,使用内部外设 主机IO口模拟方式,确认是可行,当与
    发表于 01-15 06:47

    【下载】《8位单片C语言编程:基于PIC16

    串行接口 121.4.1 USART 121.4.2 SPI 总线 131.4.3 I2C总线 141.5 PIC16 MPLAB 项目 151.5.1 MPLAB C 项目 15······下载链接:`
    发表于 01-29 17:48

    I2C模式无效-PIC18F27K40的MSSP外设

    你好2所有,我使用PIC18F26K22多年以来,我也使用了MS2SP在I2C主模式。现在我尝试使用相同的代码PIC18F27 K40,
    发表于 09-07 15:08

    PIC18F I2C总线电容MSSP与Bit-Banging通信错误

    PIC18F25K40,我公司使用的主要I2C通信是很差的选择/设计,几年后,我试图解决由于噪声问题导致的I2C通信错误,所以很有趣。我们不
    发表于 11-19 10:19

    选择PIC18F45 50的MSSP模块作为I2C或SPI的困难

    嗨,我在选择PIC18F45 50的MSSP模块作为I2C或SPI时遇到了一些困难,哪个寄存器选择了这个?问候,Akshay 以上来自于百度翻译 以下为原文 Hi,
    发表于 12-21 15:37

    I2C Master到Master通信可能吗?

    嗨,我有一个项目,一个PIC24FJ256GB210是一个I2C主控器,一个PIC16F18326,一个I2C
    发表于 12-27 16:04

    pic16和gestic之间的I2c通信是否有可用的样本代码?

    嗨,我在一个手势板上使用一个pic16f1947主板和芯片mgc3130。我试着把一个pic18f14k50的狗和手势芯片连接起来,并且通信工作正常。但当我试着把pic16和mgc31
    发表于 07-26 12:13

    请问是否可以同时在单个微控制器MSSP端口上运行SPII2C

    是否可以同时在单个微控制器MSSP端口上运行SPII2C?每次访问SPI或
    发表于 09-04 10:32

    无法使基于irq的i2cpic16lf18323上工作

    不会对加载到SSP1BUF寄存器中的数据进行计时(它发送所有“1”)。我已经在调试器中运行了进出调试器,还使用了“作用域”并通过在我的板上旋转LED进行了调试。MCC生成代码来创建基于IRQ的I2C
    发表于 10-12 13:57

    使用MSSPI2C通信LCD屏幕不工作

    我已经能够使用MSSPI2C通信到我的LCD屏幕,和EuSART蓝牙我的手机到HC-06。我通过切换LED来测试这个。当我把两个程序结合起来时,它就不再工作了。当我启用EUSAT的
    发表于 03-23 09:04

    使用MCC PIC24F进行I2C故障恢复

    你好!我有APIC24FV16KM204 I2C主控器,它通过通过滑环的导线与I2C通信
    发表于 04-21 09:31

    使用C18编译器和MSSP模块进行I2C™串行EEPROM与PIC18单片机的接口设计

    本文主要介绍了使用C18编译器和MSSP模块进行I2C™串行EEPROM与PIC18单片机的接口设计.
    发表于 06-28 08:25 11次下载
    使用C18编译器和<b class='flag-5'>MSSP</b><b class='flag-5'>模块</b><b class='flag-5'>进行</b><b class='flag-5'>I2C</b>™串行EEPROM与<b class='flag-5'>PIC</b>18单片机的接口设计

    使用MSSP模块进行Microwire串行EEPROM与PIC16器件的接口设计

    使用MSSP模块进行Microwire串行EEPROM与PIC16器件的接口设计说明。
    发表于 05-11 10:13 11次下载

    使用MSSP模块进行I2C串行EEPROM与PIC16器件的接口设计

    使用MSSP模块进行I2C串行EEPROM与PIC16器件的接口设计说明。
    发表于 05-11 10:14 16次下载

    使用MSSP模块进行I2C串行EEPROM与PIC18器件的接口设计

    使用MSSP模块进行I2C串行EEPROM与PIC18器件的接口设计说明。
    发表于 05-11 10:23 11次下载