I2C总线的标准收发代码

news2024/12/25 12:34:25

结合I2C总线协议的知识,我们可以知道I2C写数据由一下10个步骤组成。

第一步,发送一个起始信号。

第二步,发送7bit从机地址,即OZ9350的地址。此处需要注意,发送数据时,无法发送7bit数据,此处发送了7bit地址+1bit读写选择位,即发送7bit+r/w。最低位为1表示读,为0表示写。

第三步,产生一个ACK应答信号,此应答信号为从机器件产生的应答。

第四步,发送寄存器地址,8bit数据。

第五步,产生一个ACK应答信号,此应答信号为从机器件产生的应答。

第六步,发送一个数据,8bit数据。

第七步,产生一个ACK应答信号,此应答信号为从机器件产生的应答信号。

第八步,发送一个CRC校验码,此CRC校验值为2、4、6步数据产生的校验码。

第九步,既可以发送一个应答信号,也可以发送一个无应答信号,均有从机器件产生。

第十步,发送一个停止信号。

接下来,按照以上十个步骤,可以写出i2c写数据的函数。

起始信号Star,SCL = 1;时钟总线为高电平,数据总线由高电平边为低电平时候SDA = 1 到SDA = 0;

void I2C_Star(void)

{

        I2C_SCL = 1;

        I2C_SDA = 1;

        I2C_DELAY();

        I2C_SDA = 0;

        I2C_DELAY();

        I2C_SCL = 0;

        I2C_DELAY();
}

停止信号Stop,SCL = 1;时钟总线为高电平,数据总线由低电平变成高电平,SDA = 0 到SDA = 1;

void I2C_Stop(void)

{

        I2C_SDA = 0;

        I2C_SCL = 1;

        I2C_DELAY();

        I2C_SDA = 1;

        I2C_DELAY();

}

发送一个8位的字节

u8 I2C_SendByte(uint8_t Byte)

{

        uint8_t i;

        for(int i; i < 8;i++)

        {

                if(Byte & 0x80)

        {

                I2C_SDA = 1;

                }else{

        I2C_SDA = 0;

}

        I2C_DELAY();

        I2C_SCL = 1;

        I2C_DELAY();

        I2C_SCL = 0;

        I2C_DELAY();

        if(i == 7)

        {

                I2C_SDA = 1;

        }

        Byte <<= 1;

        I2C_DELAY();

        }

}

从总线上读取一个字节 8位

u8 I2C_ReadByte(void)

{

        uint8_t i;

        uint8_t value

        value = 0;

        for(i = 0; i < 8;i++)

        {

                value <<= 1;

                I2C_SCL = 1;

                I2C_DELAY();

                if(I2C_SDA_READ())

                {

                          value++;

                }

        I2C_SCL = 0;

        I2C_DELAY();
}

        return value;

}

产生一个ACK应答信号

void I2C_ACK(void)

{

        I2C_SDA = 0;

        I2C_DELAY();

        I2C_SCL = 1;

        I2C_DELAY();

        I2C_SCL = 0;

        I2C_SDA = 1;

}

产生一个非应答信号

void I2C_NACK(void)

{

        I2C_SDA = 1;

        I2C_DELAY();

        I2C_SCL = 1;

        I2C_DELAY();

        I2C_SCL = 0;

        I2C_DELAY();

}

 

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

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

相关文章

求和放大器(单位/非单位增益加法器+比例加法器)+运算放大器实现积分器和微分器

2024-9-2&#xff0c;星期一&#xff0c;22:00&#xff0c;天气&#xff1a;晴转雨&#xff0c;心情&#xff1a;晴。新的一周开始了&#xff0c;新的一个月又开始啦&#xff0c;希望大家开开心心&#xff0c;以崭新的面貌迎接中秋和十一假期&#xff01;废话不多说&#xff0c…

LinkAI工作流支持广场访问和api调用啦

什么是工作流 LinkAI工作流&#xff08;WorkFlow&#xff09;是一种灵活的智能体搭建方式。可以自由选择「大模型、应用、知识库、插件、意图识别、转人工、渠道消息发送」等多种原子能力&#xff0c;通过可视化拖拉拽的方式进行组合编排&#xff0c;零代码搭出一个业务流程。…

PPT制作加速器:3款工具插件的演示文稿制作更高效

IvyhTools英豪插件 IvyhTools是一款功能强大的PPT插件&#xff0c;主要用于辅助用户进行各种PPT编辑和处理操作。该插件具备以下主要功能&#xff1a; 字体编辑&#xff1a;用户可以对PPT中的字体进行编辑和调整。 动图录制&#xff1a;支持录制动态图像&#xff0c;方便用户在…

深度学习(四)-卷积神经网络

神经网络局限 不考虑数据形状 未考虑数据的“形状”&#xff0c;会破坏数据空间结构。例如&#xff0c;输入数据是图像时&#xff0c;图像通常是高长通道方向上的3维形状。但是&#xff0c;向全连接层输入时&#xff0c;需要将3维数据拉平为1维数据 参数庞大 全连接网络参数…

中小企业怎么选择MES:专用MES、集成MES和可配置MES

专用MES、集成MES和可配置MES是MES&#xff08;制造执行系统&#xff09;在不同发展阶段和应用场景下的三种主要形式。它们各自具有不同的特点和应用优势&#xff0c;下面将分别进行详细介绍。 专用MES 定义与特点&#xff1a; 专用MES是针对特定行业或特定生产流程而设计的…

CCS报错:error: cannot find file “libc.a“+CCS安装包

1、编译工程出现报错以下报错信息&#xff1a; error: cannot find file "libc.a" warning: automatic RTS selection: attempt to automatically link in index library "libc.a" failed; file not found warning: entry-point symbol "_c_int0…

新剧震撼登场,首集飙到9.2分,观众无不惊叹

自2022年《弹子球游戏》首季发布以来&#xff0c;它以其无与伦比的电影质感和精湛的双线叙事手法&#xff0c;让人印象深刻。这部Apple TV出品的剧集&#xff0c;改编自作家李敏金的小说《柏青哥》&#xff0c;讲述了四代移民的艰辛故事。它不仅仅是一部剧集&#xff0c;更是一…

RuoYi-Cloud 部署与配置 [CentOS7]

静态IP设置 # 修改网卡配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33# 修改文件内容 TYPEEthernet PROXY_METHODnone BROWSER_ONLYno BOOTPROTOstatic IPADDR192.168.18.130 NETMASK255.255.255.0 GATEWAY192.168.18.2 DEFROUTEyes IPV4_FAILURE_FATALno IPV6INIT…

电脑屏幕监控软件有哪些?10款真实好用的电脑屏幕监控软件 | 超全盘点,不容错过!

"千里眼&#xff0c;顺风耳&#xff0c;世间万事皆能察。" 在当今数字化时代&#xff0c;却有了现实版的映射——电脑屏幕监控软件&#xff0c;这些软件如同企业的“千里眼”&#xff0c;能够实时洞察员工的电脑使用情况&#xff0c;确保信息安全&#xff0c;提升工…

动态规划法-资源分配问题

动态规划法 - 资源分配问题 问题描述 把4个份额的资源分配给3个工程&#xff0c;给定利润表如下表所示&#xff0c;写出资源的最优分配方案的求解过程。 4份资源分配给3个工程的利润表 步骤一&#xff1a;求各个阶段不同分配份额时的最大利润及分配份额 目标 我们的目标是…

加速电商物流效率:推荐几款实用的快递批量查询工具

做电商必不可少的快递批量查询平台分享&#xff1a;固乔快递查询助手使用全攻略 在电商行业日益竞争的今天&#xff0c;高效管理物流信息成为了商家们不可或缺的一环。面对每天成百上千的订单和快递单号&#xff0c;如何快速、准确地查询并跟踪物流状态&#xff0c;成为了电商…

SpringBoot的配置文件详解

SpringBoot配置文件概述 1&#xff09;SpringBoot的配置文件的名字必须以application开头&#xff1a; 2&#xff09;SpringBoot配置文件有两种后缀&#xff1a;.properties和.yml&#xff08;表示的意思是一样&#xff0c;只是编写数据的格式不同&#xff09; application.p…

Pixelmator Pro for Mac 专业图像处理软件【媲美PS的修图软件】

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功 三、运行测试安装完成&#xff01;&#xff01;&#xff01; 效果 一、下载软件 下载软件…

js逆向--断点

js逆向--断点 一、断点的定义及作用1、定义2、断点在js逆向中的作用二、断点方法1、DOM事件断点定位加密三、断点按钮功能1、快速执行到下一个断点的位置2、执行代码,但是不会进入函数内部3、执行代码,会进入函数的内部4、回到调用这个函数的位置5、详细执行每一步一、断点的…

P-Tuning,提升预训练语言模型的自然语言理解能力

人工智能咨询培训老师叶梓 转载标明出处 预训练语言模型在具体任务上的表现往往依赖于精心设计的离散提示&#xff08;prompts&#xff09;&#xff0c;但这些提示有着不稳定性&#xff0c;微小的变化可能导致性能的大幅下降。清华大学和麻省理工学院的研究团队提出了一种名为…

011.Python爬虫系列_bs4解析

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数…

JAVA vs Python:谁更适合后端开发?

在最近的学习中,总有人问我JAVA vs Python&#xff1a;谁更适合后端开发&#xff1f; 而在后端开发中&#xff0c;Java和Python经常被拿来比较&#xff0c;就像在问“你喜欢吃米饭还是面条&#xff1f;”答案并不绝对&#xff0c;而是取决于项目的需求、团队的熟悉度&#xff…

Linux之7z命令压缩和解压(三十四)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列…

思科交换机端口安全配置1

#网络安全技术实现# #任务一交换机端口安全配置1# #1配置计算机的IP 地址、子网掩码和网关 #2配置交换机B的主机名称&#xff0c;创建vlan 10和vlan 20&#xff0c;将f0/1、2划入vlan 10&#xff0c;f0/3、4划入vlan 20&#xff0c;将f0/24配置为Trunk Switch(config)#hostna…

深度学习(一)-感知机+神经网络+激活函数

深度学习概述 深度学习的特点 优点 性能更好 不需要特征工程 在大数据样本下有更好的性能 能解决某些传统机器学习无法解决的问题 缺点 小数据样本下性能不如机器学习 模型复杂 可解释性弱 深度学习与传统机器学习相同点 深度学习、机器学习是同一问题不同的解决方法 …