您好,欢迎来到仪表展览网!
请登录
免费注册
分享
微信
新浪微博
人人网
QQ空间
开心网
豆瓣
会员服务
进取版
标准版
尊贵版
|
设为首页
|
收藏
|
导航
|
帮助
|
移动端
|
官方微信扫一扫
微信扫一扫
收获行业前沿信息
产品
资讯
请输入产品名称
噪声分析仪
纺织检测仪器
Toc分析仪
PT-303红外测温仪
转矩测试仪
继电保护试验仪
定氮仪
首页
产品
专题
品牌
资料
展会
成功案例
网上展会
词多 效果好 就选易搜宝!
江苏中霍传感科技有限公司
新增产品
|
公司简介
注册时间:
2005-07-20
联系人:
电话:
Email:
首页
公司简介
产品目录
公司新闻
技术文章
资料下载
成功案例
人才招聘
荣誉证书
联系我们
产品目录
齿轮转速传感器
0.00元专区(特采处理)
2021年霍尔传感器选型
高精度电流传感器
霍尔电流传感器
闭环电流传感器
开环电流传感器
单电源3.3V,5V霍尔电流传感器
闭环霍尔电流传感器
开环霍尔电流传感器
霍尔电压传感器
直流漏电流传感器
霍尔电压变送器
电流互感器
真有效值传感器
当前位置:
首页
>>>
公司新闻
>
公司新闻
芯片之I2C配置
I2C总线简介
首先按照惯例俗套的说一下I2C总线的定义,I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根分别命名为SDA(串行数据线)和SCL(串行时钟线)的信号线连接不同的器件即可传输信息。
I2C总线上的器件有主从之分,在嵌入式系统上的主器件一般是嵌入式主芯片(MCU),主器件负责启动、终止数据传送,产生时钟信号。从器件一般是外部设备,像小编所在行业的外部设备包括温度传感器、Tunner、HDMI等。
I2C主设备配置
了解了I2C总线的定义和基本原理后,我们怎样做才能让I2C总线正常工作呢?
首先,我们得配置I2C(本文以Hi3798CV200芯片为例)。
步骤一:硬件确认,确认连接MCU和外设用的那一组I2C通道。
Hi3798CV200 芯片集成5个I2C控制器(一般命名为I2C0~I2C4),实现标准I2C主设备功能,可完成对I2C总线上的从设备的数据发送和接收,这里我们确认的是I2C1。
步骤二:确认硬件管脚复用情况。
因为在嵌入芯片中,绝大多数管脚都是复用的。我们首先查一下芯片datasheet,看该管脚是否是复用的。从下图可以看出来该I2C管脚是复用的:
步骤三:配置复用寄存器。
从步骤二可以看出,我们使用的I2C1管脚是有复用的,所以我们要配置复用寄存器使当前管脚发挥I2C的功能。查看datasheet得知,控制该组I2C的复用寄存器分别是ioshare_56和ioshare_57。
我们可以按照下图所示的将寄存器的低三位配置为010,即此管脚就是执行I2C1的数据线功能了。
同样的方法配置ioshare_57。
配置完后我们将记录配置信息相应的分区文件烧录的开发板中。在串口输入如下命令可以查看I2C的信息:
Hi3798CV200:/ # cat /proc/hisi/msp/i2c
---------Hisilicon Standard I2C Info---------
No. Rate
0 0
1 100000
2 0
3 0
4 0
此信息显示I2C1,速率100K。
I2C总线调试
前面一节我们配置了I2C主器件,接下来就是调试该总线,调试之前需要确认从设备在I2C总线上的地址、该设备内部寄存器地址以及寄存器地址长度。
小编这里用到的是一款温度传感器。其设备地址为0x90,内部寄存器地址是0x0,寄存器地址长度为1个字节。
海思芯片I2C调试起来很方便,因为它自带了I2C控制命令,包含了读写等操作,省去了自己写调试代码。
串口命令行下输入i2c_read,就会告诉你读取操作使用方法:
Hi3798CV200:/ # i2c_read
Usage: i2c_read i2c_channel device_addr register_addr register_addr_len read_bytes_number
参数含义说明:
i2c_channel:I2C通道
device_addr:I2C设备地址。
register_addr: i2c设备内部寄存器地址。
register_addr_len: i2c设备内部寄存器地址长度。
read_bytes_number:所需要读取的数据长度。
于是我们就可以按照上面的方法调试I2C总线了,命令行下输入:
Hi3798CV200:/ # i2c_read 1 0x90 0 2 2
得到以下结果:
从上图看出来,我们执行是错误的,那么是不是I2C没有配置好呢?别急,继续检查一遍我们输入的命令,发现第4个参数写成了2,而前面我们介绍的是寄存器地址长度为1个字节。修改命令:
Hi3798CV200:/ # i2c_read 1 0x90 0 1 2
查看执行结果:
成功啦,成功读取到2个字节内容的数据。到这里,说明我们对I2C的配置是正确的!
I2C总线的工作状态
1、I2C开始和停止工作
开始:当SCL是高电平时,SDA从高电平跳变到低电平,则I2C总线开始工作
结束:当SCL是高电平时,SDA从低电平跳变到高电平,则I2C总线结束工作,如下图:
2、开始状态后紧跟着主器件会发送一个字节的数据,这个字节数据由7bit从器件地址和1bit读写位组成。
3、当从器件收到总线上的地址并匹配,发现与自己地址相同时,则在第9个时钟周期回复一个应答反馈信号。
应答信号如下图:
4、当主器件收到从器件的应答信号后继续发送后面的数据。从器件收到数据后发送ACK则表示继续传输,发送NACK则传输结束。
留在后面的作业
小编用示波器抓取了一张I2C总线的波形图,下图黄色为SCL时钟信号,绿色为SDA数据信号。
上一篇:
一文了解压敏电阻
下一篇:
电容、电感的相位差是如何产生的呢?
若网站内容侵犯到您的权益,请通过网站上的联系方式及时联系我们修改或删除