MSP MCU I2C入门指南
这是一份介绍性指南,指导你如何用超低功耗MSP微控制器 (MCU) 开始一个与I2C通信有关的项目:
简介
I2C(或称为I2C,集成电路总线)是一种两线制通信形式,主要用来在短距离、电路板间的应用中,实现微控制器与外设IC之间的低速通信。由于其采用范围很广,所以学习使用I2C与MSP MCU之间的通信已经在帮助工程师开发应用方面变得十分必要。通过使用一个超低功耗MSP MCU来访问和控制IC器件,这份指南提供了理解I2C协议并执行这一协议所需的工具与资源。
器件术语
驱动SCL时钟线路的器件被称为主器件,而对其进行响应的器件被称为从器件。在大多数应用中,MSP MCU为主器件,而外设IC为从器件,虽然有时候MSP器件是其它MCU或处理器的从器件。
物理总线
I2C总线由两条线路组成,SCL和SDA。SCL是用来将所有数据传输同步的时钟线路,而SDA是实际的数据线路。还需要第三条线路,即普通接地,不过通常不被提及。由于两条线路都是“开漏”驱动器,它们都需要到电源线路的上拉电阻,这样的话,输出在无运行期间保持在高电平。对于MSP MCU应用来说,电源电压应该与MSP MCU的Vcc相匹配。传统上,上拉电阻器的值为4.7kΩ,不过这个值的范围可以在少于1kΩ到10kΩ之间,取决于所使用的从器件。要获得正确的上拉电阻值,请参考器件数据表。多个从器件可以共用一条I2C总线,单个上拉电阻器
I2C软件协议
不论何种应用,每个支持I2C器件都需要遵守针对全部I2C器件所定义的共同软件协议,其一般结构始终保持不变。通信从启动序列开始,并在一个停止序列中结束,两个序列之间有一个8位数据传输序列。启动位之后是从地址,通常为7位(虽然很少情况下也使用10位寻址)。这7个数据位被放置在一个字节的上7位,而LSB(最低有效位)被用来存储读/写 (R/W) 位。这个位让从器件知道是对其进行写入操作(位值为0),还是读取操作(位值为1)。对一个写入操作,操作序列如下:
- 发送启动序列
- 发送从地址,其中R/W位为低电平
- 发送寄存器数
- 发送数据字节
- 发送停止序列
读取操作序列与写入操作十分相似,除了它不发送数据字节,而是重新发送启动序列(被称为一个重复启动)和从地址(不过此时,对于读取操作来说,R/W位为高电平),这样的话,它可以接收数据,而不是发送数据。这个操作在主器件发出典型停止序列后结束。下面是读取操作序列:
- 发送启动序列
- 发送从地址,其中R/W位为低电平
- 发送寄存器数
- 再次发出启动序列(重复启动)
- 发出从地址,其中R/W位为高电平
- 读取数据字节
- 发出停止序列
MSP MCU通信外设
为了实现串行通信,MSP器件上有可能提供4种不同的外设。其中只有一个外设会因器件的不同而不同。根据在MSP MCU上实现I2C通信的难易程度(从最难到最容易),将这些使用的外设列出如下:
- UART:通用同步/异步接收器/发射器。这是最早出现的通信形式,并且存在于大多数MSP430F1xx MCU上。它不支持I2C,因此必须使用一个基于软件的位响应 (bit-bang) 解决方案来与I2C器件实现通信。
- USI:通用串行接口。另外一个更加简单的通信形式,用于MSP430G2xx系列内的某些组件等成本有效或空间受限器件。器件上没有I2C状态机,必须在软件中实现。通常情况下,通过使用单独的函数来实现。
- USCI:通用串行接口。一个针对ISR和标志用法进行优化的标准通信外设。这个外设常见于MSP430F5xx/F6xx系列中,其中包括一个基于硬件的I2C状态机,因此运行所需要的代码更少。
- eUSCI:增强型通用串行通信接口。MSP器件上提供的最先进通信外设,它改进了现有USCI功能,并且包含于所有MSP430FRxx (FRAM) MCU中。
当考虑使用一个具有I2C应用的MSP器件时,用户应该明白,代码结构会随着特定MSP系列器件上存在的外设而变化。每个变量包括必须考虑在内的不同寄存器、ISR和函数。还需要澄清的一点是,并不是所有的器件系列都使用同样的外设(USCI和eUSCI存在于MSP430F5xx/6xx中,USI和USCI存在于MSP430G2xx系列中,等等),这一点在用户参考系列用户指南时会感到很困惑。因此,需要注意的一点是,在开始应用开发时,要根据实际情况来查看正确的材料,并选择合适的示例代码。德州仪器 (TI) 提供针对USI、USCI和eUSCI通信的基本I2C代码示例;这些代码示例可以在工具&软件->软件->示例 (Tools & software -> Software -> Examples) 下的MSP系列器件产品页面内找到(提供ZIP格式的文件,需要注意的是,这些软件包只包含与特定器件上存在的外设相关的代码示例)。对于那些使用USART,或者不包含一个通信外设的器件,我们在社区技术支持内提供在线I2C位响应解决方案。不论是否使用外设,始终需要上拉电阻器来实现I2C通信。某些MSP器件具有内部上拉电阻器,不过不建议使用这些电阻器,因为几个从器件需要特定的、无法在内部满足的电阻值。
用MSP实现I2C的窍门
当试图用I2C在外设IC与MSP之间进行通信时,为了帮助避免常见的执行错误,以下的一些建议值得我们仔细地看一看:
- 从专门为你的MSP系列器件提供的示例I2C代码入手(产品页面-> Tools & software -> Software -> Examples)。查看根据系列用户指南对I2C寄存器的更改(一定要确保你查看的是正确的外设章节),这样的话,你就可以牢牢掌握实现通信所必须的更改。
- 使用从器件数据表中指定的上拉电阻和地址(有时会随着输入变量的不同而变化)。需牢记的一点是,从地址的7位被存储在这个字节的上7位,之后是由通信外设设定的一个R/W位,因此,在设置从地址寄存器时,这个值也许需要向左移动一位。
- 从写入一个寄存器开始,并且监视MSP器件中的ACK。利用故障标志和实验室设备来警告通信故障。使用CCS或IAR提供的调试工具来了解代码的运行方式,哪些寄存器被访问,何时访问函数/ISR,以及它们的访问方式。在完成了这些操作后,在添加寄存器读取功能性方面会变得更加容易。
- USCI/eUSCI状态图表示,在接收到最后一个字节前,需要设定UCTXSTP位。在只接收到一个字节的应用中,UCTXSTP位与UCTXSTT位一同设置。如果接收到多个字节,那么应该在接收到第N-1字节后设定UCTXSTP。这样就确保了在接收到最后一个字节后,立即发送停止序列。
调试建议
在放弃那些看起来似乎无法正确运行的代码前,以下是调试这个系统时需要考虑的某些关键点:
- 确认上拉电阻值&从地址值,用从器件数据表对它们进行验证。
- 再次检查通信外设初始化,其中包括:寄存器设置、正确的引脚分配、已使能中断、针对运行的外设接通/释放等。
- 使用任何提供的工具(IDE调试器、逻辑分析器、示波器等)来确认MSP430和从器件严格遵循I2C软件协议。
- 查看针对已知I2C问题的勘误表,并且查看勘误表说明是否与应用的故障症状相匹配。
- 研究E2E论坛内的问题,看一看有没有相似的情况已经被解决。尝试不同的I2C相关关键字组合,并且充分利用搜索过滤器。
E2E支持
如果适当的调试和研究方法没有成功,TI E2E社区论坛可以成为与器件专家进行直接沟通的极佳资源。无论遇到何种问题,一定要掌握与之相关的详细信息,以帮助社区成员和TI工程师更好地为请求提供技术支持,其中包括:
- MSP430系列器件
- 使用的LaunchPad或TI目标板,或者定制电路板的电路原理图
- 从器件
- 所发现情况或问题的准确描述
- 使用调试器的同时,所观察到的运行方式(CCS或IAR)
- I2C初始化和函数/ISR代码片段(并不是全部代码)
- 包含合适标签的逻辑分析器和示波器图像
资源
从USCI模块迁移至eUSCI模块 (SLAA522): http://www.ti.com/lit/an/slaa522a/slaa522a.pdf
使用USCI I2C主器件 (SLAA382): http://www.ti.com/lit/an/slaa382a/slaa382a.pdf
使用USCI I2C从器件 (SLAA383): http://www.ti.com/lit/an/slaa383/slaa383.pdf
使用I2C总线(博客):http://www.robot-electronics.co.uk/i2c-tutorial
祝大家编码快乐!
原文链接:
https://e2e.ti.com/blogs_/b/msp430blog/archive/2016/05/03/msp-i2c-getting-started-guide
MSP MCU I2C入门指南的更多相关文章
- 张高兴的 .NET IoT 入门指南:(七)制作一个气象站
距离上一篇<张高兴的 .NET Core IoT 入门指南>系列博客的发布已经过去 2 年的时间了,2 年的时间 .NET 版本发生了巨大的变化,.NET Core 也已不复存在,因此本系 ...
- Web API 入门指南 - 闲话安全
Web API入门指南有些朋友回复问了些安全方面的问题,安全方面可以写的东西实在太多了,这里尽量围绕着Web API的安全性来展开,介绍一些安全的基本概念,常见安全隐患.相关的防御技巧以及Web AP ...
- Vue.js 入门指南之“前传”(含sublime text 3 配置)
题记:关注Vue.js 很久了,但就是没有动手写过一行代码,今天准备入手,却发现自己比菜鸟还菜,于是四方寻找大牛指点,才终于找到了入门的“入门”,就算是“入门指南”的“前传”吧.此文献给跟我一样“白痴 ...
- yii2实战教程之新手入门指南-简单博客管理系统
作者:白狼 出处:http://www.manks.top/document/easy_blog_manage_system.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文 ...
- 【翻译】Fluent NHibernate介绍和入门指南
英文原文地址:https://github.com/jagregory/fluent-nhibernate/wiki/Getting-started 翻译原文地址:http://www.cnblogs ...
- ASP.NET MVC 5 入门指南汇总
经过前一段时间的翻译和编辑,我们陆续发出12篇ASP.NET MVC 5的入门文章.其中大部分翻译自ASP.NET MVC 5 官方教程,由于本系列文章言简意赅,篇幅适中,从一个web网站示例开始讲解 ...
- 一起学微软Power BI系列-官方文档-入门指南(1)Power BI初步介绍
我们在前一篇文章微软新神器-Power BI,一个简单易用,还用得起的BI产品中,我们初步介绍了Power BI的基本知识.由于Power BI是去年开始微软新发布的一个产品,虽然已经可以企业级应用, ...
- 一起学微软Power BI系列-官方文档-入门指南(2)获取源数据
我们在文章: 一起学微软Power BI系列-官方文档-入门指南(1)Power BI初步介绍中,我们介绍了官方入门文档的第一章.今天继续给大家介绍官方文档中,如何获取数据源的相关内容.虽然是英文,但 ...
- 一起学微软Power BI系列-官方文档-入门指南(3)Power BI建模
我们前2篇文章:一起学微软Power BI系列-官方文档-入门指南(1)Power BI初步介绍 和一起学微软Power BI系列-官方文档-入门指南(2)获取源数据 中,我们介绍了官方入门文档与获取 ...
随机推荐
- BZOJ 3930: [CQOI2015]选数 莫比乌斯反演
https://www.lydsy.com/JudgeOnline/problem.php?id=3930 https://blog.csdn.net/ws_yzy/article/details/5 ...
- BZOJ.3667.Rabin-Miller算法(MillerRabin PollardRho)
题目链接 Pollard_Rho:http://blog.csdn.net/thy_asdf/article/details/51347390 #include<cstdio> #incl ...
- 创建django出现的问题
1.创建表报错 2.静态文件和模板配置 3.在表格插入数据库信息 4.继承模板 5.找不到post请求数据
- 学JAVA二十一天,自定义数组
今天就说一下自定义数组,至于要怎么用,我也不知道,反正逼格挺高的. 闲话不多说,开始: 首先,自定义数组首先要创建一个类,用来做自定义数组的类型. public class User{ private ...
- DB2表不活动的处理方法
DB2表不活动的处理方法(转载)首先查一下: db2 57016 SQLSTATE 57016: 因为表不活动,所以不能对其进行访问. 解决方法为:执行命令:reorg table XXX:即可. 参 ...
- windows Server 2008 R2的安装
1.http://msdn.itellyou.cn/ 在此下载IOS文件. 2.通过Nero进行刻录系统光盘,可以通过Daemon直接加载IOS,然后复制就可以了. 3.通过开机 Delete键进BI ...
- PHP7通过yum源安装及性能测试
提到PHP,肯定会有人说这是世界上最好的编程语言.单说流行程度,目前全球超过81.7%的服务器后端都采用了PHP语言,它驱动着全球超过2亿多个网站.上月初PHP7正式版发布,迎来自2004年以来最大的 ...
- [Canvas]Bombman v1.00
爆破小人Canvas版,请点此下载,并用浏览器打开试玩. 图例: 源码: <!DOCTYPE html> <html lang="utf-8"> <m ...
- SoapUI Pro Project Solution Collection-change the JDBC Request behavior
change the jdbc request : 1.change the driver name,connection string,query string or assert. the obj ...
- composer 使用
#安装 composer curl -sS https://getcomposer.org/installer | php或直接下载 composer.phar( https://getcompose ...