历史上的今天
返回首页

历史上的今天

今天是:2025年07月02日(星期三)

正在发生

2020年07月02日 | STM8 I2C主模式

2020-07-02 来源:eefocus

STM8 I2C主模式

在主模式时,I C接口启动数据传输并产生时钟信号。串行数据传输总是以起始条件开始并以停止条件结束。当通过START位在总线上产生了起始条件,设备就进入了主模式。以下是主模式所要求的操作顺序:

  • 在I2C_FREQR寄存器中设定该模块的输入时钟以产生正确的时序

  • 配置时钟控制寄存器

  • 配置上升时间寄存器

  • 编程I2C_CR1寄存器启动外设

  • 置I2C_CR1寄存器中的START位为1,产生起始条件

  • I2C模块的输入时钟频率必须至少是:起始条件
    当BUSY=0时,设置START=1,I2C接口将产生一个开始条件并切换至主模式(M/SL位置为1)。

    • 标准模式下为:1MHz

    • 快速模式下为:4MHz

注:在主模式下,设置STM8的START位将在当前字节传输完后由硬件产生一个重开始条件。

一旦发出开始条件:

  • SB位被硬件置为1,如果设置了ITEVFEN位,则会产生一个中断。然后主设备等待读SR1寄存器,紧跟着将从地址写入DR寄存器

从地址的发送
从地址通过内部移位寄存器被送到SDA线上。

  • 在10位地址模式时,发送一个头段序列产生以下事件:

    • ADD10位被硬件置为1,如果设置了ITEVFEN位,则产生一个中断。然后主设备等待程序读取SR1寄存器,并将第二个地址字节写入DR寄存器。

    • ADDR位被硬件置为1,如果设置了ITEVFEN位,则产生一个中断。

  • 在7位地址模式时,只需送出一个地址字节。一旦该地址字节被送出。

    • ADDR位被硬件置为1,如果设置了ITEVFEN位,则产生一个中断。随后主设备等待程序一次读SR1寄存器,跟着读SR3寄存器.根据送出从设备地址的最低位,主设备决定进入发送模式还是进入接收模式。

  • 在7位地址模式时

    • 要进入发送模式,主设备发送从地址时置最低位为'0'。

    • 要进入接收模式,主设备发送从地址时置最低位为'1'。

  • 在10位地址模式时

    • 要进入发送模式,主设备先送头字节,然后送最低位为'0'的从地址。

    • 要进入接收模式,主设备先送头字节,然后送最低位为'0'的从地址。接着再发送一个重复开始条件,后面跟着一个和地址匹配的头字节,并且最低位为'1'(11110xx1)。
      TRA位指示主设备是在接收模式还是发送模式。

主设备发送模式

在发送了地址和清除了ADDR位后,主设备通过内部移位寄存器将字节从DR寄存器发送到SDA线上。

主设备等待,直到TxE被清除,(见图96传送序列的EV8)。 当收到应答脉冲时:

  • TxE位被硬件置为1,如果设置了ITEVFEN和ITBUFEN位,则产生一个中断。
    如果TxE位为1并且在上一次数据发送结束之前没有新数据写入到DR寄存器,则BTF位被置为1,I2C接口等待BTF被清除。

关闭通信

在DR寄存器中写入最后一个字节后,通过设置STOP位产生一个停止条件(见图96传送序列的EV8_2),然后I2C接口将自动回到从模式(M/S位清除)。

注:TxE或BTF位置位时,应该在EV8_2事件时设置停止条件。

STM8_主设备发送模式发送序列图
(图96:STM8主设备发送模式发送序列图)

主设备接收

在发送地址和清除ADDR之后,I2C接口进入主设备接收模式。在此模式下,I2C接口从SDA线接收数据字节,并通过内部移位寄存器送至DR寄存器。在每个字节后,I2C接口依次执行以下操作:

  • 如果ACK位被置为1,发出一个应答脉冲。

  • 硬件设置RxNE=1,如果设置了INEVFEN和ITBUFEN位,则会产生一个中断(见图97传送序列的EV7)。
    如果RxNE位被置为1,并且在接收新数据结束前,DR寄存器中的数据没有被读走,硬件将设置BTF=1,I2C接口等待读DR寄存器。

关闭通信

主设备在接收到从设备发送的最后一个字节后发送一个NACK。从设备接收到NACK后,释放对SCL和SDA线的控制;主设备就可以发送一个停止/重起始条件。

  • 为了在收到最后一个字节后产生一个NACK脉冲,在读倒数第二个数据字节之后(在倒数第二个RxNE事件之后)必须清除ACK位。

  • 为了产生一个停止/重起始条件,软件必须在读倒数第二个数据字节之后(在倒数第二个RxNE事件之后)设置STOP/START位。
    在产生了停止条件后,I2C接口自动回到从模式(M/SL位被清除)。

STM8_主设备接收模式接收序列图
(图97:STM8主设备接收模式接收序列图)


推荐阅读

史海拾趣

ELPIDA公司的发展小趣事

在被美光收购后,ELPIDA的技术和人才得到了保留和传承。美光利用ELPIDA的技术优势和市场经验,继续推出了一系列高性能的DRAM产品。同时,ELPIDA也在新的领域进行探索和尝试,如生物生产等。这些努力不仅为美光公司带来了新的增长点,也为ELPIDA品牌注入了新的活力。

以上五个故事概述了ELPIDA公司在电子行业中的重要发展历程。这些故事反映了公司在市场竞争中的起伏和挑战,以及公司在技术和市场上的不断探索和创新。

Beta Dyne Inc公司的发展小趣事

随着国内市场的饱和,Beta Dyne开始将目光投向海外市场。公司制定了一套完整的国际化战略,包括在海外设立研发中心、建立销售渠道以及与当地企业建立合作关系等。通过不断的努力,Beta Dyne的产品逐渐打入国际市场,公司的知名度和影响力也得到了显著提升。

ENSIGN公司的发展小趣事

为了拓展国际市场,ENSIGN与韩国Feelux成立合资公司Feelux Shanghai,共同为高端品牌提供更专业的服务。这一举措不仅增强了ENSIGN的品牌影响力,还为公司带来了更多的商业机会。同时,ENSIGN还成为了Coelux的中国区经销商,进一步扩大了其在国际市场的份额。

Bkc Semiconductors Inc公司的发展小趣事

Bkc深知人才是企业发展的核心动力。因此,公司高度重视研发团队的建设和人才培养。通过引进业内顶尖的技术人才和提供完善的培训机制,Bkc逐渐打造出一支技术实力雄厚的研发团队。这支团队不仅为公司带来了源源不断的技术创新,也为公司的长远发展奠定了坚实的基础。

Artaflex公司的发展小趣事

面对全球电子市场的不断扩张,Artaflex公司制定了全球化的发展战略。公司通过设立海外分支机构、拓展国际市场、参与国际展会等方式,不断提升品牌知名度和市场份额。同时,公司还积极引进国际先进技术和管理经验,提升自身的竞争力。这一战略的实施使得Artaflex在全球电子行业中占据了重要地位。

Concurrent Logic公司的发展小趣事

随着公司规模的扩大,Concurrent Logic开始寻求国际合作。他们与日本、韩国和欧洲的几家公司签订了技术合作协议,共同开发新一代的并行处理解决方案。这些合作为公司带来了更广阔的市场和更多的资源,推动了技术的进一步创新。

问答坊 | AI 解惑

PC电源管理技术

我们采用的测试程序是基于最新的Business Winstone 2001的BatteryMark测试程序,它可以更加客观的反映你的笔记本电源管理的性能。这个测试程序不再是让笔记本不停的工作,而是模拟人们普通工作的情况,给系统一个喘息的空间,现实中我们的工作情况 ...…

查看全部问答>

wince batt驱动adc采样不准

各位大虾帮帮忙,小弟在做s3c6410的蓄电池驱动,读取adcdat发现采样不准,采样到的数值波动范围很大,从2800~3600, 硬件测试发现输入电压很稳定,纹波之类的都没问题。 经过测试发现点击触摸屏会改变采样到的值,去掉touch驱动,ad采样的值波动 ...…

查看全部问答>

将剩余nor flash 划分分区问题

我的平台是PXA270+Wince6.0,32M Intel P30 NOR Flash 使用MSFALH来将flash剩余容量利用起来,遇到了一些问题,也有一些疑问,请大家帮忙一下。 如果使用RAM运行, 分区划分成功,可正常显示盘符,也可以正常读写。 但如果选择 IMGFLASH 写入fla ...…

查看全部问答>

急求解决单片机串口通信的问题

小弟通过单片机与PC串口通信,遇到了问题,望大哥大姐们指教 PC暂时用串口调试助手代替吧,51单片机往PC发多个字节的数据,串口调试助手接收,但是无论如何都只能接收到第一个字节的数据。我用串口调试助手向单片机发送数据,如果只发一个字节,单 ...…

查看全部问答>

wince 下CF不可见

我的硬件是cpu+852gm+ich4,定制的ce image不能看到cf卡(硬盘)。 我在其他架构主板上amd+cs6656上是可以看到cf卡(硬盘)。 微软网站有个相关问题何宗健老师做了回答,说可能与芯片有关。 我现在想请教大家如何cpu+852gm+ich4架构上实现了?…

查看全部问答>

TCPMP 问题

最近下了TCPMP 0.72版源码,编译后在模拟器上播放的挺好,拿到板子上播放就很卡(班子700MHZ)(同一片源:视频 : 40 Mb, 3993 Kbps, 30.0 fps, 清晰度: 1280*720 (16:9),  XVID = XVID Mpeg-4;音频 : 2.29 Mb, 224 Kbps, 44100 Hz, 2 ...…

查看全部问答>

2410的初始化以及定时器设定问题?

我用的时候广州友善之臂的开发板,现在再没有操作系统的情况下,就用了友善之臂提供的启动代码,写了一个定时器程序,但是现在就是跑不起来,能不能帮忙看看? #include \"def.h\" #include \"option.h\" #include \"2410addr.h\" #include \"2 ...…

查看全部问答>

199刀飞利浦HUE惨遭拆解 神灯初现端倪

经过King和包租婆的各方奔走,囊中羞涩的我们(仅2W项目经费)总算了找到了以下单位提供的免费样品,真是感激淋涕啊!1、 欧司朗中国提供的R,G,B,W灯珠2、 忆光提供的R,G,B,W灯珠3、 信驰达科技提供的CC2540 蓝牙模块4、 四正节能提供的散热器5、进 ...…

查看全部问答>

【TI首届低功耗设计大赛】sacq的金刚狼(7):最简单的数字电压表

replyreload += \',\' + 1767184;这个“简单”,更多的意义是:这个编程的过程很简单。 Energia的例程AnalogInOutSerial的主要功能是把采集的ADC结果通过串口发送出去, 这次就准备增加个LCD1602的显示功能,并把ADC结果转换成电压值(V)。 ...…

查看全部问答>