I2C通信 读写数据过程

在通信之初,主从机必须根据自己的要求约定好通信规则:command的定义和位置、address的位数和位置。


以读写从机寄存器数据为例:

假设从机寄存器地址为8位、从机寄存器也位8位(被读取数据为8位);

约定读command为0x01,写command位0x02;

约定主机发起通信后,第一个slave address字节收到ack后,紧跟的一个字节为command,再下面一个字节为address。


1. 读寄存器数据步骤:

    1.1 主机先发起一次通信,将读command(0x01)和需要读取的寄存器地址address写入从机;(主机发出写操作)

    1.2 从机firmware的处理:

          1.2.1 将command和address分别提取出来;

          1.2.2 判断command的含义(本例中,是读指令还是写指令);

          1.2.3 根据收到的的address,将对应寄存器的的数据放入从机I2C输出buffer;(这个步骤可以使用指针)

    1.3 主机再次发起一次通信,读取从机的数据;(主机发出读操作)





2. 写操作步骤:

    2.1 主机发起通信,按约定依次写入command、要写入的从机寄存器地址address和要写入的数据data;

    2.2 从机firmware要做的处理:

          2.2.1 分别提取command、address和data;

          2.2.2 根据command做出判断(本例中则判断是写入还是读取);

          2.2.3 将data写入与接收到的address对应的寄存器。(这个步骤可以使用指针)。



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462127.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++的运算符重载(转)

C的运算符重载 cc扩展语言 C中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C中重新定义这些运算符,赋予已有运算符新的功能&#xff0c…

Android 用户界面---样式和主题(Styles and Themes)(二)

样式属性 理解了样式是如何定义的之后&#xff0c;就需要学习<item>元素都定义了那些有效的样式属性类型。你可能已经熟悉了像layout_width和textColor属性&#xff0c;但是还有更多的可以使用的样式属性。 查找应用于指定的View对象的最好的地方是对应的类参考&#xff…

Android应用程序结构总结

2019独角兽企业重金招聘Python工程师标准>>> Android应用程序结构分析 由于是初学者&#xff0c;对于Android应用程序的结构的认识是一穷二白的&#xff0c;对于开发Android应用程序&#xff0c;必须先了解其程序的结构和作用。一下就用一个简单的例子来解剖&#…

递归--整数划分问题

问题描述&#xff1a; 将正整数n表示成一系列正整数之和&#xff1a;nn1n2…nk&#xff0c;其中n1≥n2≥…≥nk≥1&#xff0c;k≥1。正整数n的这种表示称为正整数n的划分。 问题1&#xff1a; 输出整数n的所有可能的划分&#xff0c;如&#xff1a; 输入&#xff1a;6 输出&am…

嵌入式软件开发注意事项一

嵌入式软件开发注意事项一1、首先对测试板进行各方面硬件性能的测试&#xff1a;电源测试&#xff0c;时钟测试等等。要确保硬件最基本的几个性能是正常的&#xff0c;否则后面真的无法进行软件的开发&#xff0c;因为如果你没有确保硬件的正确性&#xff0c;那么后面进行软件调…

Oracle 表空间与数据文件

-- --Oracle 表空间与数据文件 -- /* 一、概念 表空间&#xff1a;是一个或多个数据文件的逻辑集合 表空间逻辑存储对象&#xff1a;永久段-->如表与索引 临时段-->如临时表数据与排序段 回滚段-->用于事物回滚或闪回内存的撤销数据 表空间分类&#xff1a;系统表空间…

简单的深度优先遍历和广度优先遍历

代码来源于《啊哈&#xff01;算法》。 1、深度优先遍历&#xff1a; &#xff08;1&#xff09;无权值 #include<stdio.h> int book[101],n, e[1001][1001], sum; void DFS(int cur) {int h;sum;printf("%d ", cur);//目前所在点进行的操作&#xff0c;可以…

【 2013华为杯编程大赛成都第三组前两题试题及答案】

2013-09-12 16:41:24 题目描述 某省会城市街道纵横交错&#xff0c;为了监控路灯的运行状况&#xff0c;每条街道使用一个数字字符串标识该街道上所有路灯的运行状况。假设路灯只有如下3种状态&#xff08;分别用数字0, 1, 2标识&#xff0c;一盏路灯只对应其中一种状态&#x…

webrtc笔记(1): 基于coturn项目的stun/turn服务器搭建

webrtc是google推出的基于浏览器的实时语音-视频通讯架构。其典型的应用场景为&#xff1a;浏览器之间端到端(p2p)实时视频对话&#xff0c;但由于网络环境的复杂性(比如&#xff1a;路由器/交换机/防火墙等&#xff09;&#xff0c;浏览器与浏览器很多时候无法建立p2p连接&…

ADS中startup.s文件启动分析

映像文件分析&#xff0c;ADS 中startup.s 文件启动分析&#xff0c;学嵌入式开发ADS 必看2010-04-17 10:21声明&#xff1a; 我也是转来的&#xff0c;不是原创&#xff0c;由于别人是网易的日志&#xff0c;不能直接转&#xff0c;所以…… 感谢原创&#xff01;让我明白了st…

String Statistics(2008年珠海市ACM程序设计竞赛)

String Statistics 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte 描述 You have an n n matrix of lower-case letters. You start from somewhere in the matrix, walk in one of the eight directions (left, right, up, down, up-left, up-right, …

从0-1背包问题学习回溯法、分支界限法、动态规划

一、0-1背包问题的描述 下面将使用回溯法、分支界限法、动态规划法来分析和解决此问题。 二、回溯法 &#xff08;1&#xff09;算法步骤 &#xff08;2&#xff09;代码如下&#xff08;没有裁剪函数&#xff09;&#xff1a; 用i和n来判断结束与否&#xff0c;是因为解空间…

高可用性的HDFS—Hadoop分布式文件系统深度实践

《高可用性的HDFS—Hadoop分布式文件系统深度实践》基本信息作者&#xff1a; 文艾 王磊 出版社&#xff1a;清华大学出版社 ISBN&#xff1a;9787302282587上架时间&#xff1a;2012-5-14出版日期&#xff1a;2012 年5月开本&#xff1a;16开页码&#xff1a;371版次&#xff…

推荐:解析“extern”

http://blog.csdn.net/keensword/article/details/401114 写的很不错转载于:https://www.cnblogs.com/ATually/archive/2012/04/05/2432826.html

【字符串问题】求一个字符串中重复出现的最长的子串

2013-09-14 15:34:16 用后缀数组求一个字符串中重复出现的最长的子串。 用C中的string类可以很方便地进行操作&#xff0c;需将后缀数组保存在vector<string>&#xff0c;如下面代码中的string版本所示&#xff0c;但这样就会因为<string>有很大的开销&#xff1b;…

关于scanf和的问题

简单地说&#xff0c;如果使用scanf函数把一个字符串读进一个字符数组中&#xff0c;不要使用&&#xff1b;读取其他基本变量类型时&#xff0c;在变量名之前添加&。或者说&#xff0c;字符串名字本身就是一个地址了&#xff0c;所以不用取地址符。 如以下代码&#xf…

Oracle lower() Upper()函数

即将某字段信息中的字母转成小写、大写的方法。 将 user表里的user_name字段信息中含有字母的全部转成大写的方法&#xff1a; update user set  user_nameUpper(user_name) 同理得到将 user表里的user_name字段信息中含有字母的全部转成小写的方法&#xff1a; update user …

【作品】超级玛丽射击版

【下载地址】稍后上传 【以下内容摘自试验报告&#xff0c;可能狗屁不通&#xff0c;尽情谅解】 &#xff0d;游戏介绍: 简单的射击游戏,键盘控制动作[角色的移动,跳跃等],鼠标控制攻击的位置方向, 单击鼠标即射击,同时可以设置游戏规定时间,时间到则结束游戏. &#xff0d;游戏…

嵌入式系统Linux内核开发工程师必须掌握的三十道题

嵌入式系统Linux内核开发工程师必须掌握的三十道题 如果你能正确回答以下问题并理解相关知识点原理&#xff0c;那么你就可以算得上是基本合格的Linux内核开发工程师&#xff0c;试试看&#xff01; 1) Linux中主要有哪几种内核锁&#xff1f; Linux的内核锁主要是自旋锁和信号…