基本的i2c的编程包括:读数据,写命令,写数据

有关i2c的时序需要的话查看这里http://blog.csdn.net/qqliyunpeng/article/details/41511347

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精简总结的更多相关文章

  1. Linux I2C总线控制器驱动(S3C2440)

    s3c2440的i2c控制器驱动(精简DIY),直接上代码,注释很详细: #include <linux/kernel.h> #include <linux/module.h> ...

  2. Linux I2C设备驱动编写(二)

    在(一)中简述了Linux I2C子系统的三个主要成员i2c_adapter.i2c_driver.i2c_client.三者的关系也在上一节进行了描述.应该已经算是对Linux I2C子系统有了初步 ...

  3. 【转】Linux I2C设备驱动编写(二)

    原文网址:http://www.cnblogs.com/biglucky/p/4059582.html 在(一)中简述了Linux I2C子系统的三个主要成员i2c_adapter.i2c_drive ...

  4. i2c设备驱动注册

      Linux I2C设备驱动编写(二) 原创 2014年03月16日 23:26:50   在(一)中简述了Linux I2C子系统的三个主要成员i2c_adapter.i2c_driver.i2c ...

  5. STM32F10x_硬件I2C主从通信(轮询发送,中断接收)

    Ⅰ.写在前面 关注我分享文章的朋友应该知道我在前面讲述过(软件.硬件)I2C主机控制从机EEPROM的例子.在I2C通信主机控制程序是比较常见的一种,可以说在实际项目中,很多应用都会使用到I2C通信. ...

  6. STM32F10x_模拟I2C读写EEPROM

    Ⅰ.写在前面 说到IIC,大家都应该不会陌生,我们初学单片机的时候或多或少都知道或了解过,甚至使用I2C控制过器件.但是,有多少人真正去深入理解,或者深入研究过I2C通信协议呢? 1.我们有必要学习I ...

  7. STM32F10x_硬件I2C读写EEPROM(标准外设库版本)

    Ⅰ.写在前面 上一篇文章是“STM32F10x_模拟I2C读写EEPROM”,讲述使用IO口模拟I2C总线通信,对EEPROM(AT24Xxx)进行读写操作的过程. 上一篇文章主要内容:I2C协议.模 ...

  8. 框架-设备与驱动的拆分及实现-I2C

    目录 前言 笔录草稿 概要 原理及实现方法 IIC 例子实战-驱动 1. 创建文件 2. 创建 I2C 驱动名字列表 3. 组建 I2C 驱动结构体 4. 编写-注册 I2C 驱动函数 5. 创建 I ...

  9. U8g2图形库与STM32移植(I2C,软件与硬件)

    U8g2图形库 简介 U8g2 是一个用于嵌入式设备的简易图形库,可以在多种 OLED 和 LCD 屏幕上,支持包括 SSD1306 等多种类型的底层驱动,并可以很方便地移植到 Arduino .树莓 ...

随机推荐

  1. Spring的事务传播性与隔离级别以及实现事物回滚

    一.事务的四个特性(ACID) 原子性(Atomicity):一个事务中所有对数据库的操作是一个不可分割的操作序列,要么全做,要么全部做. 一致性(Consistency): 数据不会因为事务的执行而 ...

  2. 【CSS】少年,你想拥有写轮眼么?

    最近笔者在公司内部开展了一次CSS讲座,由于授课经验不太足,授课效果自我感觉并不太好,不过课中有一个笔者用CSS写的一个小效果,其中还是包含了蛮多CSS的常见知识点的,正好也有部分同学很感兴趣如何实现 ...

  3. [USACO 2012 Jan Silver] Bale Share【DP】

    传送门:http://www.usaco.org/index.php?page=viewproblem2&cpid=107 没想到太不应该了,真的不应该啊! f[i][j][k]表示前i个包, ...

  4. 转-解决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 ...

  5. AJPFX总结关于JVM的基础知识

    写在前面 之前老大让做一些外包面试,我的问题很简单: 介绍一下工作中解决过比较 有意思的问题. HashMap使用中需要注意的点. 第一个问题主要是想了解一下对方项目经验的含金量,第二个问题则是测试下 ...

  6. hihocoder1710 等差子数列

    思路: 将数列合并之后使用线段树.边界条件容易写错. 实现: #include <bits/stdc++.h> using namespace std; ; const int INF = ...

  7. Glide清除缓存

    Glide是谷歌推荐的一款加载图片的第三方框架,对内存优化更好,更省资源,他的众多好处,我就不一一描述了,有兴趣的朋友可以百度一下,介绍的还是挺详细的. 今天主要给大家介绍一下关于怎么获取Glide的 ...

  8. Node.js——环境变量

  9. js面向对象之构造函数

    最简单的面向对象程序<script type="text/javascript"> var obj = new Object(); obj.qq = '10791611 ...

  10. 解压上传的zip文件流和文件

    /** * 解压上传的zip文件流 * @param stream * @param outputDirectory */ public static String unzip(InputStream ...