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

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

3天内不再提示

如何使用EFM8LB1/EFM8BB3 I2C slave器件

Silicon Labs 来源:互联网 作者:佚名 2018-07-27 11:42 次阅读

Silicon Labs(亦称“芯科科技”)EFM8 8位MCU系列产品的用户在开发产品时,需要进一步了解如何使用EFM8LB1 / EFM8BB3 I2C slave器件,使它看起来与SMBus的外设完全不同?对此,我们制作了一篇知识库文章,引导工程师们加快设计流程。欢迎往下阅读或点击阅读原文至Silicon Labs中文社区观看完整文章。

M8LB1 /BB3包含一个I2CSLAVE外设,它包含许多有助于高速传输的功能,但可能会使熟悉传统SMBus操作的用户感到困惑。在这里,我们简要介绍I2CSLAVE器件,并附加I2C SLAVE器件引导加载器示例代码以供参考。此代码示例是为EFM8BB3编写的,但如果需要,可以轻松移植到EFM8LB1。

I2C外设包含2字节FIFO和1字节移位寄存器,分别用于TX/ RX。I2C SLAVE器件支持自动ACK / NACK I2C master器件,由I2C0CN0寄存器的BUSY bit控制。默认情况下,BUSY为“1”,器件不响应I2Cmaster器件。发送到器件的所有I2C数据都将被NACKed。我们应将此BUSYbit设置为“0”,器件将确认I2Cmaster器件。 master设备持续向设备发送数据,设备自动向master设备确认最多3个ACK,因为FIFO中有两个字节,移位寄存器中有1个字节。然后SCL保持低电平以表示设备无法接收更多数据。我们应检查I2C0FCN1寄存器的RXE位,以了解FIFO中是否有数据,从I2C0DIN寄存器读取接收数据。

自动ACK功能使流量控制变得困难,如上所述,当RX FIFO已满时,SCL保持低电平,因此器件可以处理数据。 masster如何改变读/写方向呢?还有另一个功能可以帮助解决这种情况。 I2C0ADM寄存器的FACS位字段。默认值为“1”,表示FORCE_STRETCH。该位置为1时,时钟拉伸始终发生在地址字节的ACK之后,直到固件清零I2C0INT位。通过这种时钟拉伸功能,我们可以在读/写方向变化期间进行流量控制。

这里有一个基于AN945的I2C SLAVE引导加载程序示例代码,请查看它并参考I2C SLAVE机状态机的工作原理。 I2C Slave状态机在参考手册中的两个流程图(图17.7和图17.8)中可以看到,可以压缩到此状态解码表(参考手册中的表17.1 -

https://www.silabs.com/documents/public/reference-manuals/efm8bb3-rm.pdf)

I2C Bootloader的工作原理与SMBus Bootloader类似,详见AN945 -

https://www.silabs.com/documents/public/application-notes/an945-efm8-factory-bootloader-user-guide.pdf。附件中的boot_I2C.c文件显示了I2CSlave外设的使用方式 - 人们可能会注意到代码中只定义了三种状态,而上面显示的表描述了更多。有几个原因导致某些状态未包含在Bootloader代码中–

  1. Bootloader代码的编写方式使得上述某些情况永远不会发生,即使它们发生,它们也可以在默认情况下捆绑在一起。我们主要关注RD,WR和RD+ NACK状态。

  2. Bootloader的代码受大小限制。我们尝试将其放入一个Flash页面,这反过来意味着我们包含的代码只是Bootloader运行所必需的,而不是考虑永远不会发生的情况。

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

    关注

    5082

    文章

    19104

    浏览量

    304796
  • Silicon Labs
    +关注

    关注

    11

    文章

    328

    浏览量

    62469
  • efm8lb1
    +关注

    关注

    0

    文章

    2

    浏览量

    3243

原文标题:【MCU知识库】如何使用EFM8 8位MCU的I2C Slave外设

文章出处:【微信号:SiliconLabs,微信公众号:Silicon Labs】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    RISC V的I2C操作

    。tsuData中,1代表10ns;Timeout中,1表示10nstLow和tHigh的1代表10ns10.1.3 软件部分(Risc V)l  I2C通信主要包括以下几个部分:
    的头像 发表于 11-01 11:06 194次阅读

    请问vc5509a只有一个I2C口,可以挂3I2C器件,AIC23的slave address怎么设置?

    请问vc5509a只有一个I2C口,可以挂3I2C器件,AIC23的slave address怎么设置?
    发表于 10-25 14:14

    使用MSP430 MCU通过I2C实现低功耗Windows 8 HID应用

    电子发烧友网站提供《使用MSP430 MCU通过I2C实现低功耗Windows 8 HID应用.pdf》资料免费下载
    发表于 10-17 09:19 0次下载
    使用MSP430 MCU通过<b class='flag-5'>I2C</b>实现低功耗Windows <b class='flag-5'>8</b> HID应用

    优秀实践:I3C共享总线上的I2C器件

    电子发烧友网站提供《优秀实践:I3C共享总线上的I2C器件.pdf》资料免费下载
    发表于 09-06 09:49 0次下载
    优秀实践:<b class='flag-5'>I3C</b>共享总线上的<b class='flag-5'>I2C</b><b class='flag-5'>器件</b>

    TCA6408A-Q1具有中断输出的低电压8I2C和SMBus I/O扩展器数据表

    电子发烧友网站提供《TCA6408A-Q1具有中断输出的低电压8I2C和SMBus I/O扩展器数据表.pdf》资料免费下载
    发表于 07-03 11:47 0次下载
    TCA6408A-Q<b class='flag-5'>1</b>具有中断输出的低电压<b class='flag-5'>8</b>位<b class='flag-5'>I2C</b>和SMBus <b class='flag-5'>I</b>/O扩展器数据表

    TCA9548A-Q1汽车8通道I2C开关数据表

    电子发烧友网站提供《TCA9548A-Q1汽车8通道I2C开关数据表.pdf》资料免费下载
    发表于 06-22 10:38 0次下载
    TCA9548A-Q<b class='flag-5'>1</b>汽车<b class='flag-5'>8</b>通道<b class='flag-5'>I2C</b>开关数据表

    EFM32HG222数据手册

    电子发烧友网站提供《EFM32HG222数据手册.pdf》资料免费下载
    发表于 06-22 09:18 0次下载

    TCAL9538 8I2C总线,SMBus I/O扩展器数据表

    电子发烧友网站提供《TCAL9538 8I2C总线,SMBus I/O扩展器数据表.pdf》资料免费下载
    发表于 06-19 10:04 0次下载
    TCAL9538 <b class='flag-5'>8</b>位<b class='flag-5'>I2C</b>总线,SMBus <b class='flag-5'>I</b>/O扩展器数据表

    EFM32ZG222数据手册

    电子发烧友网站提供《EFM32ZG222数据手册.pdf》资料免费下载
    发表于 06-18 09:49 0次下载

    用STM8S003F3调试硬件I2CI2C被IC1占用,MCU要对IC2写配置写不进去,总线一直忙的原因?

    各位大神,小弟初学,在用STM8S003F3调试硬件I2C,总线上有三个器件,包括STM8,当我用MCU把另两个器件复位后,发现
    发表于 05-17 07:37

    STM8L151与MTK手机I2C通信遇到的疑问求解

    , ENABLE); /* Initialize I2C peripheral */ I2C_Init(I2C1, 100000, SLAVE_ADDRESS,
    发表于 05-13 06:47

    stm8s I2C总线总是处于忙状态是怎么回事?

    求助各位大大,我使用的是STM8S103K3,想要使用stm8通过I2C控制一个LCD的驱动芯片,在I2C写的时候,判断bus是否处于忙状态的循环无法跳出,通过示波器量
    发表于 04-22 06:08

    i2c接口由哪几根线组成 i2c接口可以接哪些器件

    I2C接口的线路可以适应不同的系统需求和器件规格,因此具体的线路配置可能会有所不同。但通常来说,时钟线(SCL)和数据线(SDA)是I2C接口的核心线路。
    的头像 发表于 03-05 16:55 3751次阅读
    <b class='flag-5'>i2c</b>接口由哪几根线组成 <b class='flag-5'>i2c</b>接口可以接哪些<b class='flag-5'>器件</b>

    造成FX3 I2C延迟的原因?

    ; /* 启动 I2C 主模块。 比特率设置为 100kHz。 * 数据传输通过 DMA 完成。 */ cyu3pmemSet ((uint8_t *) i2cConfig、
    发表于 02-23 06:39

    蓝牙串口通讯总线——I2C/SPI/UART

    Sensor、Touch、蓝牙模块、WIFI模块等也都兼容这三种通信协议的1种以上。那么这三条通信总线有什么区别呢?工业物联网无线通信专业厂商为您一一细说—— I2C:半双工、同步、串行传输,物理上只有两根线(SDA/SCL);传输数据必须
    的头像 发表于 01-22 09:41 1615次阅读
    蓝牙串口通讯总线——<b class='flag-5'>I2C</b>/SPI/UART