i2c精简总结
基本的i2c的编程包括:读数据,写命令,写数据
1、读寄存器的一般步骤:开始i2c,写设备号,写那个寄存器,重新开始,写设备号读,设置成接收模式(Freescale MKL05Z32xxx4 的一个例子)
uint8 hal_dev_read_reg(I2C_MemMapPtr p, uint8 devaddr, uint8 addr)//第一个参数目的是把i2c这种结构的地址传递过来,以方便在这块地址中来存储数据
{
uint8 result; i2c_start(p);
i2c_write_byte(p, devaddr | I2C_WRITE );////这里有问题| I2C_WRITE i2c_wait(p); //等待处理完毕
i2c_get_ack(p); //然后开始接收返回信号这里只是进行了接收的工作, i2c_write_byte(p, addr);
i2c_wait(p);
i2c_get_ack(p); i2c_repeated_start(p); //
i2c_write_byte(p, devaddr | I2C_READ );
i2c_wait(p);
i2c_get_ack(p); i2c_set_rx_mode(p); i2c_give_nack(p);//这里可以没有,
result = i2c_read_byte(p);
i2c_wait(p); i2c_stop(p);
result = i2c_read_byte(p); //**********************************
pause();
return result; }
2、写寄存器的一般步骤是开始i2c,写地址,写寄存器的地址,写数据,停止。
void hal_dev_write_reg(I2C_MemMapPtr p, uint8 devaddr, uint8 addr, uint8 data)//比命令多了个地址,就是在什么地址上写什么
{
i2c_start(p); i2c_write_byte(p, devaddr | I2C_WRITE);
i2c_wait(p);
i2c_get_ack(p); i2c_write_byte(p, addr);
i2c_wait(p);
i2c_get_ack(p); i2c_write_byte(p, data);
i2c_wait(p);//等标志
i2c_get_ack(p); i2c_stop(p);
pause();//停止了之后还要等待一定的时间才能在次进行别的操作,这里很重要。
}
3、写命令的操作是:开始i2c,写设备地址,写命令,停止
void hal_dev_write_cmd(I2C_MemMapPtr p, uint8 devaddr, uint8 cmd)
{
i2c_start(p); i2c_write_byte(p, devaddr | I2C_WRITE);
i2c_wait(p);
i2c_get_ack(p); i2c_write_byte(p, cmd);
i2c_wait(p);
i2c_get_ack(p); i2c_stop(p);
pause();
}
4、需要注意的一点是:i2c操作过程中注意最后这个pause(),这个函数就是起到一个延时的作用,也就是,在操作i2c的过程中,写,读寄存器中的间隔是很重要的,要留下一定的时间。
版权声明:本文为博主原创文章,未经博主允许不得转载。
i2c精简总结的更多相关文章
- Linux I2C总线控制器驱动(S3C2440)
s3c2440的i2c控制器驱动(精简DIY),直接上代码,注释很详细: #include <linux/kernel.h> #include <linux/module.h> ...
- Linux I2C设备驱动编写(二)
在(一)中简述了Linux I2C子系统的三个主要成员i2c_adapter.i2c_driver.i2c_client.三者的关系也在上一节进行了描述.应该已经算是对Linux I2C子系统有了初步 ...
- 【转】Linux I2C设备驱动编写(二)
原文网址:http://www.cnblogs.com/biglucky/p/4059582.html 在(一)中简述了Linux I2C子系统的三个主要成员i2c_adapter.i2c_drive ...
- i2c设备驱动注册
Linux I2C设备驱动编写(二) 原创 2014年03月16日 23:26:50 在(一)中简述了Linux I2C子系统的三个主要成员i2c_adapter.i2c_driver.i2c ...
- STM32F10x_硬件I2C主从通信(轮询发送,中断接收)
Ⅰ.写在前面 关注我分享文章的朋友应该知道我在前面讲述过(软件.硬件)I2C主机控制从机EEPROM的例子.在I2C通信主机控制程序是比较常见的一种,可以说在实际项目中,很多应用都会使用到I2C通信. ...
- STM32F10x_模拟I2C读写EEPROM
Ⅰ.写在前面 说到IIC,大家都应该不会陌生,我们初学单片机的时候或多或少都知道或了解过,甚至使用I2C控制过器件.但是,有多少人真正去深入理解,或者深入研究过I2C通信协议呢? 1.我们有必要学习I ...
- STM32F10x_硬件I2C读写EEPROM(标准外设库版本)
Ⅰ.写在前面 上一篇文章是“STM32F10x_模拟I2C读写EEPROM”,讲述使用IO口模拟I2C总线通信,对EEPROM(AT24Xxx)进行读写操作的过程. 上一篇文章主要内容:I2C协议.模 ...
- 框架-设备与驱动的拆分及实现-I2C
目录 前言 笔录草稿 概要 原理及实现方法 IIC 例子实战-驱动 1. 创建文件 2. 创建 I2C 驱动名字列表 3. 组建 I2C 驱动结构体 4. 编写-注册 I2C 驱动函数 5. 创建 I ...
- U8g2图形库与STM32移植(I2C,软件与硬件)
U8g2图形库 简介 U8g2 是一个用于嵌入式设备的简易图形库,可以在多种 OLED 和 LCD 屏幕上,支持包括 SSD1306 等多种类型的底层驱动,并可以很方便地移植到 Arduino .树莓 ...
随机推荐
- 洛谷 P1816 忠诚
https://www.luogu.org/problemnew/show/1816 st表模板 #include<cstdio> #include<algorithm> us ...
- Kuskal/Prim POJ 1789 Truck History
题目传送门 题意:给出n个长度为7的字符串,一个字符串到另一个的距离为不同的字符数,问所有连通的最小代价是多少 分析:Kuskal/Prim: 先用并查集做,简单好写,然而效率并不高,稠密图应该用Pr ...
- Ghost系统操作记录
1.下载Symantec Ghost应用. 2.下载老毛桃PE工具箱. 3.利用老毛桃PE工具箱制作启动U盘. 4.拷贝Ghost应用至U盘. 5.设置计算机启动顺序为U盘启动. 6.重启计算机进入P ...
- [BZOJ1005][HNOI2008]明明的烦恼 数学+prufer序列+高精度
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int N; ...
- 快速排序算法原理及其js实现
要说快排的原理,通俗点说就是把一个事情,分成很多小事情来处理,分治的思想. 假设我们现在对“6 1 2 7 9 3 4 5 10 8”这10个数进行排序.首先在这个序列中随便找一个数作为 ...
- AlertDialog的实现
课程Demo 重点解析自定义对话框 public class MainActivity extends AppCompatActivity { private Button bt1; private ...
- Activity的四种启动模式区别
(1) standard 模式启动模式,每次激活Activity时都会创建Activity,并放入任务栈中. (2) singleTop 如果在任务的栈顶正好存在该Activity的实例, 就重用该实 ...
- apache反向代理配置
apache简单的反向代理配置 Proxypass /api /http://locahost:3000 反向代理-1.jpg
- 转:谈谈iOS中粘性动画以及果冻效果的实现
在最近做个一个自定义PageControl——KYAnimatedPageControl中,我实现了CALayer的形变动画以及CALayer的弹性动画,效果先过目: 先做个提纲: 第一个分享的主题是 ...
- sh NonUniqueObjectException
话题引入: 使用hibernate进行更新操作时,首先调用了findById方法获取要修改的对象,此时session没有被关闭,接着重新创建一个对象,将要修改的属性值赋值给这个对象.调用修改方法抛出如 ...