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运行所必需的,而不是考虑永远不会发生的情况。

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

    关注

    4981

    文章

    18281

    浏览量

    288387
  • Silicon Labs
    +关注

    关注

    11

    文章

    306

    浏览量

    62269
  • efm8lb1
    +关注

    关注

    0

    文章

    2

    浏览量

    3219

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

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

收藏 人收藏

    评论

    相关推荐

    STM8S003F调试硬件I2C遇到的疑问求解?

    最近新使用STM8S003F芯片,在调试硬件I2C的遇到了一个奇怪的问题:示波器仅仅能够量到起始信号,然后一直保持低电平,直到超时。我的理解:不管Slave地址正不正确,SCL应该能够得输出吧,可是
    发表于 04-24 06:50

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

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

    造成FX3 I2C延迟的原因?

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

    i2c的从机数量有限制吗?

    我想请问一下,i2c的从机数量有限制吗?看到有人说最大八个从机, I2C_SetSlaveAddr(I2C_MS_PORT, 1, 0x15, 0);/*
    发表于 01-17 08:04

    使用NUC123当I2C slave,累积3次后reset就没有用了怎么处理?

    使用NUC123当I2C slave。 在某些形况下,master发生错误后,产生一个不正常的波形,最后,再製造一个stop波形。 上述的形况,导致NUC123得到一个status code
    发表于 01-16 07:56

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

    /P2.1). 3. Configure I2C registers as required for slave or master operation. 4. Enable the I2
    发表于 01-15 06:47

    aduc7026做I2C slave,接收数据存在的疑问求解

    =FIQ_Handler; FIQEN = 0x200;while(1){}} 核心接收测试代码是这样的,主机我换过3种不同型号的开发板,通过I2C和aduc7026通信,连续发送N byte
    发表于 01-12 06:03

    MCU在线技术讲座-EFM和EFR: 面向物联网开发的通用MCU平台

    Silicon Labs(亦称“芯科科技”)日前重磅发布EFM8 BB5x 8位MCU系列新品,包括市场上功能最强大的8位MCU,可提供50 MHz的核心频率比其他任何通用
    发表于 11-23 13:45

    stc8g1k08的硬件i2c可以从机模式吗?

    stc8g1k08的硬件i2c可以从机模式吗
    发表于 09-20 06:38

    在Mini51上使用I2C设为Slave端,如何判断Master端送出的Slave Address为何?

    在Mini51上使用 I2C, 设为Slave 端, 若分别设置 I2CADRR0,I2CADRR1 为不同位址, 在 Slave端,
    发表于 08-31 10:15

    i2c的从机数量有限制吗?

    我想请问一下,i2c的从机数量有限制吗?我在论坛上看到有人说最大八个从机, I2C_SetSlaveAddr(I2C_MS_PORT, 1, 0x15, 0);/*
    发表于 08-29 06:56

    使用NUC123当I2C slave,累积3次后reset没有用是为什么?

    使用NUC123当I2C slave。 在某些形况下,master发生错误后,产生一个不正常的波形,最后,再製造一个stop波形。 上述的形况,导致NUC123得到一个status code
    发表于 08-24 06:39

    基于 FPGA 的模拟 I2C协议系统设计

    址存放在 I2C 总线的地址寄存器中。I2C 总线上所有的外围器件都有规范的器件地址。器件地址由 7 位数字组成,它和
    发表于 08-14 18:21

    M051的I2C为何可以设置这么多地址?

    */ I2C_SetSlaveAddr(I2C0, 3, 0x75, 0);/* Slave Address : 0x75 */ /* Set
    发表于 06-27 06:56

    LPC8N04 I2C Master/Slave混合操作是否可行?

    Slave 切换到 Master,这样它也可以读取一些传感器,并将结果缓存在它的 EEPROM 中。 另一个更大的处理器会定期唤醒并读取 I2C 总线,从 LPC8N04 EEPROM 空间中获取
    发表于 05-19 07:12