MSP430使用指南14 -> I2C通信(eUSCI)

2020-03-30来源: eefocus关键字:MSP430  使用指南  I2C通信  eUSCI

说到MSP430 MCU的I2C资源,那么首先就得先看一下USCI。


如果你了解过多款MSP430 MCU你会发现,内部资源里有USCI和eUSCI,那么他们什么意思呢?


USCI (Universal Serial Communication Interface),即通用串行通信接口,eUSCI中的e则是enhanced的意思,即增强型,那么有什么区别呢?


一些主要的区别如下表所示,F2xx这一列代表USCI,FR57xx代表eUSCI

更多详细区别,请查看TI官方文档:


http://www.ti.com/lit/an/slaa522a/slaa522a.pdf


其实你会发现 区别不是很大,仅仅是寄存器的名字变了一点,在使用起来很是相似,因此本次使用eUSCI进行讲解。


eUSCI又分两种:A和B,有什么区别呢:


A:支持UART和SPI

B:支持I2C和SPI

也就是说两种都支持SPI,但A仅支持UART和SPI,B仅支持I2C和SPI。想过为什么吗?


(这段内容比较深,也不一定是全部都是正确的:我认为毕竟eUSCI就是数字逻辑电路嘛,TI设计成这种格式去给客户机会去选用SPI或I2C/UART,相对于单独设计I2C,SPI,UART内核来说,第一节省电路,可以降低功耗和成本,第二减少引脚数量。那为什么都支持SPI嘛,因为SPI协议简单嘛,没有I2C那种起始位,停止位,也没有UART那种固定的波特率,SPI自己有自己的时钟,所以内部电路集成方面与UART或I2C有一定的公共成分,而UART和I2C差别较大,结合起来没什么性价比吧,所以出现了A版本和B版本。这些仅是我的猜测。。。em……)


好啦,那么正式进入我们今天的主题  à I2C协议。


首先,第一部分肯定要讲清楚什么是I2C协议,这类资料网上一大堆一大堆,也可以很容易的搜索到资料来参考,我就简单的过一下吧。


I2C(Inter-Integrated Circuit) 是Philips公司发明的一种用于片级连接的总线方式,有什么好处呢:


简单,就两根线SDA和SCL。

总线方式,可以挂接多个设备。

通信速度有低速,普通,高速等模式,目前最快好像可以实现3.4Mbps速度。

其实还有挺多优点的,不然也不可能经历那么多年I2C依旧很主流。首先我想稍微解释一下挂接设备数量问题:


这个可以挂接多个设备主要是由于I2C的开漏特性决定的,即0有效,外部需要上拉电阻,开漏和推挽的资料网上也很多,可以自己查来看看。那么能挂接多少设备呢?这个本质上是由总线上的容性决定的,我们都知道,电容越大,充电时间越长,那么信号上升速度越满,当慢到不能满足I2C要求是,那么则不能挂接了,挂接设备相当于并联电容嘛,电容就变大了,然后就。。。,就。。。。


I2C协议如下:

简单吧,就两根线嘛,首先呢,起始位。如果你是个Master,需要发信号给Slave,那么肯定要给个起始位嘛,告诉Slave你开始发数据了,如上图:SCL=1,SDA由0变1标志着起始位,然后呢,肯定是要写地址了,从设备地址,总线上挂接了很多Slave,你要发送给谁呢? 那么就写谁的地址,I2C地址是7位的(别抬杠,知道有10位地址模式,不过原理相同的),然后呢,下一位是R/W,你是读Slave里的数据呢,还是写数据到Slave呢?需要吧? 后面就是数据了,当然,当你写完一个数据后,Slave会给你个回应那个,then你接着写,Slave再回应,就这样最后Master发送一个STOP位(SCL=1,SDA由低变高),好啦,那么一包数据通信即结束了。

PS:讲解一个小知识:你细看I2C协议你会发现:SDA数据线上只能再SCL=0的时候改变,SCL=1时需要保持状态,为什么呢? 简单嘛,请看START和STOP信号,你就知道了。


好啦,I2C协议讲解完了,那么正式进入正题:MSP430 I2C如何使用:


先上一张I2C模块的内部结构图:

一堆一堆的寄存器,标志位对吧,最终出来两根线SDA和SCL是吧。就是这样的嘛,内部的模块不就是一些逻辑电路加一些Memory嘛,迷糊没事的,后面看看寄存器就知道了:


那么就开始讲解如何使用吧,也就是寄存器内容啦:


看一下有哪些寄存器:

UCBxCTLW0

UCA10:10位地址选择,1时为10位地址模式,0时为7位地址模式。


UCLSA10:Slave10位地址选择,也就是说你作为Master时需要通信的Slave是否是10位地址的模式。


UCMM:多Master选择,因为正常I2C时钟是由Master控制的,因此如果存在多Master时,需要释放SCL的,故设计了这一位用来应对多Master模式。


UCMST:Master或Slave选择,决定MSP430用作I2C中的Master还是Slave。


UCMODEx:模式选择:SPI或者I2C,同时SPI还分为三线和四线模式。


UCSSELx:时钟源选择,建议选SMCLK吧,频率高一点,精度也就高一点。


UCTXACK:回应地址正确,这个是再Slave或者多Master模式下,开启地址掩码功能后,只对比除去掩码的剩下地址,如果一致的话,需要发送个地址确认位(UCSWACK=1时需要手动设置发送,UCSWACK=0时会自动发送),这个就是那个地址确认位。


UCTR:发送还是接受,数据给Slave时是发送,读的时候则是接受或者作为Slave也是接受。


UCTXNACK:发送ACK信号,在Slave模式下使用。


UCTXSTP:生成STOP信号,在Master模式下使用。


UCTXSTT:生成起始信号,在Master模式下使用。


UCSWRST:软件复位使能,默认是1,即不能写一些寄存器设置I2C参数,有些寄存器想进行操作时需要复位这一位。


UCBxCTLW1

UCETXINT:这一位仅在Slave模式下有用,决定着什么时候会置位UCTXIFG0(这一位置位标志着有能力去发送数据了),当这一位是1时,收到Master发送过来的START信号就会置位,当这一位是0时,则等到接收到Master发送的地址与自己的地址匹配时,才会置位UCTXIFG0(注意这种情况下地址1-3都要disable)。


UCCLTO:I2C总线时钟超时,也就是可能总线上卡死了,这一位用来设置这个时间,也可以关闭此项功能。如果设置了时间,在超时之后会触发UCCLTOIFG中断,用户可以在中断里重新初始化I2C。


UCSTPNACK:这一位是指在MCU作为Master接受数据时,在收到Slave的最后一个字节数据后可以发送一个响应给Slave,不过这并不符合I2C协议,因此只用在一些特定场合,正常的I2C协议,请忽略。


UCSWACK:看UCBxCTLW0中的UCTXACK描述,这一位和地址掩码有关系。


UCASTPx:自动生成STOP设置,这一位只用在Master模式下,在设置自动生成STOP信号后,发送完设置长度的数据后,I2C内核直接自动发送停止位,这样会简化用户操作。注意:你可能会遇到一个情况:设置自动STOP后,会设置一个发送数据的长度,而这个数据长度寄存器,也就是UCTBCNTx,这个是8位的,也就是最大值就是255了,因此,如果I2C一次性需要传递的数据包超过了255字节,那么有两种方案解决:不要开启STOP,选择手动设置STOP信号,或者启动DMA模块,这两张方式都可以。手动STOP简单一点,DMA速度快一点。


UCGLITx:错误检测位,这一位可以检测信号线上的毛刺噪声,建议直接默认就好啦。


UCBxBRW

这个寄存器是控制I2C波特率的,目前MSP430的I2C模块支持快速的400Kbps(资料中说的严谨,起始可以更快的)。那么如何计算波特率的呢?看下面框图:

就是对时钟进行分频后,就直接传输给SCL线上了,因此很容易计算,在选择时钟源之后,时钟源的频率除以这一位,就是SCL的时钟频率。


UCBxSTATW

UCBCNTx:只读寄存器,用来获取I2C总线上接受或者发送的数据量。


UCSCLLOW:用来查看SCL状态,可以确定是否有其他设备将此总线时钟拉低了。


UCGC:只读寄存器,标志着是否接收到了通用的Call 地址。


UCBBUSY:只读寄存器,用来查看总线上是否繁忙,一般情况下,为了保证数据发送的严谨性,在数据发送前都要查询这一位来决定是否可以发送数据的。


UCBxTBCNT

UCTBCNTx:在上面自动生成STOP信号时提过,这一位用来设置I2C一包数据发送的数量。


UCBxRXBUF

I2C数据接受缓冲区,在收到I2C接受中断后(当然是在使能中断后啦),接收到的数据会存放在这个缓冲区里,需要读取出来,读取后会自动清除接收中断。


UCBxTXBUF

I2C数据发送缓冲区,也就是如果你想通过I2C协议发送一个数据,那么你只需要把这个数据写入这个寄存器中即可,当数据移入移位寄存器后,开始发送,发送完成后则会触发发中断,代表着当前寄存器的值已经空了,数据已经发送完成,可以写入下一个数据进行发送了。


UCBxI2COA0

I2C的general call是一个什么呢? 就类似于广播模式嘛,地址就是0,更多详细资料,请查看I2C官网:https://www.i2c-bus.org/addressing/(PS:推荐大家有问题多去官网查看,官方发布的肯定没什么问题,理解起来不会有误区)


UCOAEN:使能自己的I2C地址。


I2COAx:自己的I2C地址0。


UCBxI2COA1

参考UCBxI2COA0


UCOAEN:使能自己的I2C地址。


I2COAx:自己的I2C地址1。


UCBxI2COA2

参考UCBxI2COA0


UCOAEN:使能自己的I2C地址。


I2COAx:自己的I2C地址2。


UCBxI2COA3

参考UCBxI2COA0


UCOAEN:使能自己的I2C地址。


I2COAx:自己的I2C地址3。


总的来说,就是MSP430的I2C模块可以设置4个Slave地址,可以产生不同的I2C中断。


UCBxADDRX

ADDRXx:只读寄存器,接收到数据对方的地址。


UCBxADDMASK

ADDMASKx:地址掩码,可以选择性的接受对象固定地址的设备发送来的数据。


UCBxI2CSA

I2CSAx:Slave设备的地址,注意,这个只用在MCU作为Master模式下,这一位用来设置你要发送的Slave设备他的地址。


UCBxIE

各种各样的中断使能位,这

[1] [2] [3] [4]
关键字:MSP430  使用指南  I2C通信  eUSCI 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic492870.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:MSP430使用指南3 -> SYS系统控制
下一篇:MSP430使用指南32 -> SAC智能模拟组合

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

MSP430F149内部Flash操作
一般,在单片机中的Flash存储器用于存放程序代码,属于只读型存储器。而在MSP430些列的单片机中,都可以通过内置的Flash控制器擦除或改写任何一段的内容。另外,msp430的单片机内部还专门留有一段Flash区域(information memory),用于存放掉电后需要永久保存的数据。利用430内部的Flash控制器,可以完成较大容量的数据记录、用户设置参数在掉电后的保存等功能。硬件介绍:要对Flash读写,首先要了解MSP430的存储器组织。430单片机的存储器组织结构采用冯诺依曼结构,RAM和ROM统一编址在同一寻址空间中,没有代码空间和数据空间之分。一般430的单片机都统一编址在0-64k地址范围中,只有少数高端
发表于 2020-05-07
MSP430F149内部Flash操作
MSP430 FLASH读写
MSP430 FLASH型单片机的FLASH存储器模块根据不同的容量分为若干段,其中信息存储器SegmengA及SegmentB各有128字节,其他段有512字节。SegmentB的地址是:0x01000h到0x107F,SegmentA的地址是:0x01080h到0x010FFh。其他段的地址根据容量不同,从0xFFFFh开始,每512字节为一段进行分配。FLASH存储器写入数据时,每一位只能由“1”变成“0”,不能由“0”变成“1“,因此,当我们有数据要保存到FLASH存储器时,要先对目标段进行整段擦除操作,擦除操作使的对应段FLASH存储器变成全“1”。下面是擦除FLASH段的子程序,配置好必要的寄存器后,向段中任意地址写入
发表于 2020-05-06
关于Msp430 Flash型单片机内部Flash的操作
1 Msp430Flash型单片机内部Flash存储器介绍MSP430的Flash存储器是可位、字节、字寻址和编程的存储器。该模块由一个集成控制器来控制编程和擦除的操作。控制器包括三个寄存器,一个时序发生器及一个提供编程、擦除电压的电压发生器。Msp430的Flash存储器的特点有:1)产生内部编程电压2)可位、字节、字编程,可以单个操作,也可以连续多个操作3)超低功耗操作4)支持段擦除和多段模块擦除2 Flash存储器的分割Msp430 Flash存储器分成多个段。可对其进行单个字节、字的写入,也可以进行连续多个字、字节的写入操作,但是最小的擦除单位是段。Flash 存储器被分割成两部分:主存储器和信息存储器,两
发表于 2020-05-06
MSP430的JTAG接口和BSW接口
1.JTAG口,JTAG引脚如下定义:单片机TCK——测试时钟输入,接仿真器7脚单片机TDI——测试数据输入,接仿真器2脚单片机TDO——测试数据输出,接仿真器1脚单片机TMS——测试模式选择,接仿真器5脚单片机TRST——测试复位,输入引脚,低电平有效(此引脚可选),接仿真器11脚 2. BSW接口单片机SBWTDIO/RST——测试数据输入输出,接仿真器1脚TDO,其中SBWTDIO和单片机复位RST引脚复用单片机SBWTCK/TEST——测试时钟,接仿真器7脚TCK
发表于 2020-05-06
MSP430的JTAG接口和BSW接口
MSP430F169(四)——浅谈F169看门狗
什么是看门狗在工业现场,往往会由于供电电源、空间电磁干扰或其他原因引起强烈的干扰噪声。这些干扰作用于数字器件,极易使其产生误动作,从而失去应有的控制功能,引起MSP430发生“程序跑飞”事故。若不进行有效的处理,程序就不能回到正常的状态,从而失去应有的控制功能。看门狗定时器正是为了解放这类问题而产生的,尤其是在具有循环结构的程序任务中更为有效。看门狗有一个RST管脚,用来复位。看门狗的两种工作模式(一)看门狗模式:看门狗模式是看门狗这个组件的主要功能,(这不是废话嘛,看门狗组件肯定是看门狗啊)提到看门狗,不得不说这个密码保护了(WDTPW watchdog timer password )任何读写操作必须通过他才能正确执行指令
发表于 2020-05-06
MSP430F169(四)——浅谈F169看门狗
MSP430学习的第一个模拟I2C程序
#include <msp430.h>unsigned char I2CBUF;unsigned char checkbit;#define SCL_H   (P10OUT |= BIT2)      // P10.2为SCL#define SCL_L   (P10OUT &= ~BIT2)#define SDA_H   (P10OUT |= BIT1)     //p10.1为SDA#define SDA_L   (P10OUT &= ~BIT1)#define
发表于 2020-05-06
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved