历史上的今天
返回首页

历史上的今天

今天是:2024年10月22日(星期二)

正在发生

2021年10月22日 | stm32专题十六:IIC(二)stm32 IIC通讯过程 标志位

2021-10-22 来源:eefocus

1 IIC进入主模式的步骤:


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


以下是主模式所要求的操作顺序:

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

● 配置时钟控制寄存器

● 配置上升时间寄存器

● 编程I2C_CR1寄存器启动外设

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


2 作为主机发送器时的传送时序图

主发送器发送流程及事件说明如下:

(1) 控制产生起始信号(S),当发生起始信号后,它产生事件“EV5”,并会对 SR1 寄存器的“SB”位置 1,表示起始信号已经发送;


 EV5事件:

(2) 紧接着发送设备地址并等待应答信号,若有从机应答,则产生事件“EV6”及“EV8_1”,这时 SR1 寄存器的“ADDR”位及“TXE”位被置 1,ADDR 为 1 表示地址已经发送,TXE为 1 表示数据寄存器为空;


EV6事件:

EV8_1事件

(3) 以上步骤正常执行并对 ADDR 位清零后,我们往 I2C 的“数据寄存器 DR”写入要发送的数据,然后DR会将数据转移到移位寄存器,移位寄存器将数据通过SDA线一位一位的发送。一旦DR的数据转移到了移位寄存器,就会产生EV8事件:


EV8事件:EV8:TxE=1,移位寄存器非空,数据寄存器空,写入DR寄存器将清除该事件。值得注意的是,EV8事件必须在当前字节传输完成前清除,为什么?因为如果没有及时清除,就说明没有新的数据填入DR,此时会是发送完成的状态(即EV8_2),然后系统就会产生停止信号了。


如何消除EV8事件?

可以看到,EV8事件其实就是连续用于写入数据的。当发送数据时(DR已经转移到移位寄存器,且无新写入数据),EV8事件会一直持续,所以我们可以往DR再传入一个数据,来消除EV8事件。而其他的事件,会一直拉低SCL,不发送时钟信号,直到我们处理完对应的事件。

所以,当发送单个数据时,由于没有新的数据写入DR,会在这个单数据发送后BTF = 1,此时TXE = 1,产生EV8_2事件,然后继续发送停止信号。当连续发送时,不断的往DR写入数据,这会清除掉BTF标志,只有当最后一个数据时,才会产生EV8_2。


(4) 当我们发送数据完成后,控制 I2C 设备产生一个停止信号(P),这个时候会产生EV8_2 事件,SR1 的 TXE位及 BTF位都被置 1,表示通讯结束。


按照寄存器描述,BTF位实际上做的是如下工作:在移位寄存器将数据全部发送完成时判断DR是否有数据,如果没有,那就代表这已经是最后一个数据了,所以此时字节发送结束。

3 作为主机接收器时的传输时序

主接收器接收流程及事件说明如下:

(1) 同主发送流程,起始信号(S)是由主机端产生的,控制发生起始信号后,它产生事件“EV5”,并会对 SR1寄存器的“SB”位置 1,表示起始信号已经发送;


(2) 紧接着发送设备地址并等待应答信号,若有从机应答,则产生事件“EV6”这时SR1 寄存器的“ADDR”位被置 1,表示地址已经发送;


这里存在一些难以理解的地方,接下来是个人的理解,可能会有错误,欢迎指正。

首先是EV6_1事件:中文参考手册中说到,要清除响应和停止条件的产生位。清除响应很好理解(就是在接收到一个数据后不应答),此时发送器就不会再发送数据。但是为什么要清除停止条件的产生位?应该是要设置停止位才对啊

对于这个问题,最好的答案就是英文参考手册,其实中文参考手册在这里是错误的,真的无语了,以下是英文参考手册,如何设置说的非常清楚。

如果只接收一个字节的数据,在EV6事件后,马上设置关闭应答使能,以及产生停止条件,这些设置都必须在当前传输的ACK到达之前完成(如果没有,就容易出现数据错误),这也是硬件IIC的一个缺点吧,整个硬件IIC的详细分析就到此结束了。

推荐阅读

史海拾趣

Gespac Inc公司的发展小趣事

对于快速充电IC(bq2002)电路,网友可能还会有多种问题,以下是一些常见问题及其回答:

一、电路设计相关问题

  1. BQ2002的BAT引脚如何正确接入电池电压?
    • 回答:BQ2002的BAT引脚用于接收电池电压的取样信号。通常,电池电压会经过一个电阻分压网络后接入BAT引脚,以确保BQ2002能够正确检测电池电压。电阻分压网络的输入电阻不应小于200kΩ,以避免对电池电压造成过大影响。
  2. 如何设置BQ2002的充电速率?
    • 回答:BQ2002的充电速率可以通过TM引脚进行设置。当TM引脚接地时,充电速率为1C(即电池容量的1倍)。此外,根据数据手册,TM引脚的不同电平还可能对应不同的充电速率,如C/2或2C,但具体设置需参考具体的数据手册或应用指南。
  3. BQ2002的CC引脚如何控制充电电流?
    • 回答:BQ2002的CC引脚用于控制充电电流的开关,而不是直接调节充电电流的大小。CC引脚有两种状态:高阻态和接地态。当CC引脚为高阻态时,充电电流可以流动;当CC引脚接地时,充电电流被抑制。充电电流的大小通常由外部恒流源(如LM317等)的电阻设置决定,与CC引脚的状态无关。

二、功能实现与调试问题

  1. 为什么BQ2002没有进入快速充电模式?
    • 回答:BQ2002没有进入快速充电模式可能由多种原因造成,如电池电压或温度不符合快速充电条件、TS引脚电压不在正常范围内、或外部电路设计问题等。建议检查电池电压和温度是否满足快速充电条件,同时检查TS引脚电压是否介于0.25VCC和0.4VCC之间(或1.25V和2.0V之间),并确认外部电路设计无误。
  2. BQ2002在充电过程中突然停止充电怎么办?
    • 回答:BQ2002在充电过程中突然停止充电可能是由于电池过热、电池电压过高或外部电路故障等原因造成的。建议检查电池温度是否过高,电池电压是否超出BQ2002的承受范围,并检查外部电路是否有短路或断路等故障。如果问题依旧存在,可能需要更换BQ2002芯片或重新设计外部电路。
  3. 如何调整BQ2002的充电截止电压?
    • 回答:BQ2002的充电截止电压通常是通过外部电路设计来调整的。具体方法可能因电路设计而异,但一般可以通过调整与BAT引脚相连的分压电阻的阻值来改变BQ2002检测到的电池电压值,从而调整充电截止电压。需要注意的是,在调整充电截止电压时,应确保电池不会因过充而损坏。

三、其他常见问题

  1. BQ2002支持哪些类型的电池?
    • 回答:BQ2002通常支持多种类型的可充电电池,如镍氢电池、锂离子电池等。但具体支持的电池类型可能因BQ2002的版本或制造商而有所不同。因此,在使用BQ2002进行电池充电时,应参考具体的数据手册或应用指南以了解支持的电池类型。
  2. BQ2002的功耗如何?
    • 回答:BQ2002的功耗通常较低,但具体功耗值可能因工作条件(如输入电压、输出电流、环境温度等)的不同而有所变化。在设计电路时,应充分考虑BQ2002的功耗对系统整体性能的影响,并采取相应的措施来降低功耗。

以上是针对快速充电IC(bq2002)电路的一些常见问题及其回答。需要注意的是,由于BQ2002的具体应用可能因电路设计、电池类型等因素而有所不同,因此在实际应用中应参考具体的数据手册或应用指南以获取准确的信息。

GWM Associates公司的发展小趣事
在需要高灵敏度信号检测的实验中,如物理实验、生物信号检测等。
Fortiming Corporation公司的发展小趣事

背景:随着电子技术的快速发展,客户对频率控制产品的要求越来越高。

发展:Fortiming不断投入研发资源,进行技术创新和产品升级。公司成功开发出了一系列高精度、高稳定性的晶振产品,满足了市场对高品质频率控制产品的需求。同时,Fortiming还积极探索新的应用领域,如通信、汽车电子、物联网等,不断拓展市场边界。

Chipcera Technology Co Ltd公司的发展小趣事

随着技术实力的不断增强,Chipcera开始将目光投向更广阔的市场。公司通过参加国际电子展会、与知名厂商合作等方式,积极推广自家产品。同时,公司还加大了对品牌建设的投入,通过提升产品质量、优化售后服务等措施,树立了良好的品牌形象。这些努力使得Chipcera的产品逐渐打入国际市场,成为行业内的佼佼者。

ATM [Advanced Technical Materials]公司的发展小趣事

20世纪60年代,英国人谢泼德·巴伦产生了发明一款“随时可以取钞票的机器”的想法,并付诸实践。1967年6月27日,世界上第一台ATM在英国伦敦北部的巴克莱银行亮相。这台机器的成功推出,标志着ATM开始进入公众的视野,并逐渐在全球范围内得到广泛应用。

Holtek(合泰)公司的发展小趣事

中国ATM的发展历程始于20世纪80年代中期。1987年,中国银行在珠海推出了中国大陆第一台ATM,标志着ATM在中国开始了发展。随后,经过数十年的快速发展,中国ATM市场经历了多个阶段,从初级阶段到专业化阶段,再到如今的快速发展阶段。中国ATM市场的繁荣,不仅反映了国内银行业电子化建设的成果,也体现了电子行业的快速发展和普及。

问答坊 | AI 解惑

[赠送]2本台历

某供货商送到,自己有很多本了。 如果近的话,最好自取(快递费比台历价值还高呢)。 公司地址为:上海市静安区 靠近美琪大戏院(江宁路北京西路) 家庭地址为:人民广场新世界附近 …

查看全部问答>

一种高精度电流检测电路的设计

一种高精度电流检测电路的设计…

查看全部问答>

IP核互连策略及规范

IP核互连策略及规范…

查看全部问答>

关于24C64芯片的问题,大家帮忙看看

谁有关于24C64芯片的资料??? 想看下跑4M 晶桢需要延时多久。 知道的帮下忙,在线等。。…

查看全部问答>

1602电子钟 带年月日 可以调整 绝对经典

1602电子钟 带年月日  可以调整 绝对经典…

查看全部问答>

怎样DIY电路板的网站

发现个新网站  不错   http://elm-chan.org/docs/wire/wiring_e.html 电路版 DIY…

查看全部问答>

modelsim是否可以保存仿真结果?

请问modelsim的仿真结果可不可以保存下来?q2和ISE的仿真结果是可以回写到仿真文件中的,不知道modelsim行不行?我试过保存为.do文件,但每次重新load后只有编辑的输入信号波形,而上次仿真得到的输出信号波形都没了,怎样才能保存呢?…

查看全部问答>

STM32耗电问题

1)正常运行于19MHz,电流19mA(包括片上外设GPIOA-E、SPI2、TIM2-5、ADC1),和理论值0.5mA/Hz有很大差距。 2)0.5mA/Hz是不是只是指内核耗电情况?不包括片上外设? 3)进入Stop模式后,电流有2-3mA,关闭了片上外设也降不下来。 有没 ...…

查看全部问答>

IARReadonlydata的疑问

                                 stm32用IAR5.4的环境,我是新手,请教一下各位大侠,我程序中很多字符串,发现编译器将字符串都放在Readonly data ...…

查看全部问答>