TI - MCU - MSP430使用指南14 -> 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也是接受

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值