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 .树莓 ...
随机推荐
- Spring的事务传播性与隔离级别以及实现事物回滚
一.事务的四个特性(ACID) 原子性(Atomicity):一个事务中所有对数据库的操作是一个不可分割的操作序列,要么全做,要么全部做. 一致性(Consistency): 数据不会因为事务的执行而 ...
- 【CSS】少年,你想拥有写轮眼么?
最近笔者在公司内部开展了一次CSS讲座,由于授课经验不太足,授课效果自我感觉并不太好,不过课中有一个笔者用CSS写的一个小效果,其中还是包含了蛮多CSS的常见知识点的,正好也有部分同学很感兴趣如何实现 ...
- [USACO 2012 Jan Silver] Bale Share【DP】
传送门:http://www.usaco.org/index.php?page=viewproblem2&cpid=107 没想到太不应该了,真的不应该啊! f[i][j][k]表示前i个包, ...
- 转-解决Mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost'问题
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) Red Hat Enterpr ...
- AJPFX总结关于JVM的基础知识
写在前面 之前老大让做一些外包面试,我的问题很简单: 介绍一下工作中解决过比较 有意思的问题. HashMap使用中需要注意的点. 第一个问题主要是想了解一下对方项目经验的含金量,第二个问题则是测试下 ...
- hihocoder1710 等差子数列
思路: 将数列合并之后使用线段树.边界条件容易写错. 实现: #include <bits/stdc++.h> using namespace std; ; const int INF = ...
- Glide清除缓存
Glide是谷歌推荐的一款加载图片的第三方框架,对内存优化更好,更省资源,他的众多好处,我就不一一描述了,有兴趣的朋友可以百度一下,介绍的还是挺详细的. 今天主要给大家介绍一下关于怎么获取Glide的 ...
- Node.js——环境变量
- js面向对象之构造函数
最简单的面向对象程序<script type="text/javascript"> var obj = new Object(); obj.qq = '10791611 ...
- 解压上传的zip文件流和文件
/** * 解压上传的zip文件流 * @param stream * @param outputDirectory */ public static String unzip(InputStream ...