IIC协议详解

news2024/11/25 3:32:15

目录

1.IIC协议概述

2.IIC总线传输

3.IIC-51单片机应用

1.起始信号

2.终止信号

3.应答信号

4.数据发送

4.IIC-32单片机应用

用到的库函数:


1.IIC协议概述

  • IIC全称Inter-Integrated Circuit (集成电路总线)
  • 是由PHILIPS公司在80年代开发的两线式串行总线,用于连接微控制器及其外围设备。IIC属于半双 工同步通信方式

特点

  • 简单性和有效性

由于接口直接在组件之上,因此IIC总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件

  • 多主控(multimastering)

其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当 然,在任何时间点上只能有一个主控。

构成

IIC串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL,其时钟信号是由主控 器件产生。所有接到IIC总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线 的SCL上。对于并联在一条总线上的每个IC都有唯一的地址。

2.IIC总线传输

IIC总线在传输数据的过程中一共有三种类型信号,分别为:开始信号、结束信号和应答信号。

//起始位,停止位,数据位,速度

这些信号中,起始信号是必需的,结束信号和应答信号

  • 起始信号
  • 终止信号
  • 应答信号

发送器每发送一个字节(8个bit),就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。 应答信号为低电平时,规定为有效应答位(ACK,简称应答位),表示接收器已经成功地接收了该字节;

应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。

  • 数据发送的时序

3.IIC-51单片机应用

先确认IO口

sbit scl = P0^1;
sbit sda = P0^3;

1.起始信号

void IIC_Start()
{
    sda = 1;
    scl = 1;
    _nop_();
    sda = 0;
    _nop_();
}

2.终止信号

void IIC_Stop()
{
    sda = 0;
    scl = 1;
    _nop_();
    sda = 1;
    _nop_();
}

3.应答信号

char IIC_ACK()
{
    char flag;
    sda = 1;//就在时钟脉冲9期间释放数据线
    _nop_();
    scl = 1;
    _nop_();
    flag = sda;
    _nop_();
    scl = 0;
    _nop_();
    return flag;
    5.1.3 OLED写命令
    写命令/数据的代码
}

4.数据发送

void IIC_Send_Byte(char dataSend)
{
    int i;
    for(i = 0;i<8;i++){
        scl = 0;//scl拉低,让sda做好数据准备
        sda = dataSend & 0x80;//1000 0000获得dataSend的最高位,给sda
        _nop_();//发送数据建立时间
        scl = 1;//scl拉高开始发送
        _nop_();//数据发送时间
        scl = 0;//发送完毕拉低
        _nop_();//
        dataSend = dataSend << 1;
    }
}

4.IIC-32单片机应用

用到的库函数:

HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c,
uint16_t DevAddress,
uint16_t MemAddress,
uint16_t MemAddSize,
uint8_t *pData,
uint16_t Size,
uint32_t Timeout)
  • 参数一:I2C_HandleTypeDef *hi2c,I2C设备句柄
  • 参数二:uint16_t DevAddress,目标器件的地址,七位地址必须左对齐
  • 参数三:uint16_t MemAddress,目标器件的目标寄存器地址
  • 参数四:uint16_t MemAddSize,目标器件内部寄存器地址数据长度
  • 参数五:uint8_t *pData,待写的数据首地址
  • 参数六:uint16_t Size,待写的数据长度
  • 参数七:uint32_t Timeout,超时时间
  • 返回值:HAL_StatusTypeDef,HAL状态(OK,busy,ERROR,TIMEOUT)

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

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

相关文章

进程组.会话.终端

一.进程组.会话.终端概念 1.1进程组 在Linux操作系统中&#xff0c;进程组&#xff08;Process Group&#xff09;是一组进程的集合。进程组内的每个进程都有一个相同的进程组ID&#xff08;PGID&#xff09;。进程组可以用于进行作业控制、信号传递和进程状态管理等操作。 …

大模型+检索增强(RAG、Atlas 和 REPLUG)

https://zhuanlan.zhihu.com/p/651380539 https://github.com/ninehills/blog/issues/97 1. 检索增强生成 RAG 在问答和对话的场景下&#xff0c;通常可以通过检索和生成两种方式得到一个回复。检索式回复是在外部知识库中检索出满意的回复&#xff0c;较为可靠和可控&#…

如何使用 MATLAB 数学编程软件调用 Python 脚本详细教程(每周更新中)

MATLAB 读写操作 在 MATLAB 中&#xff0c;可以使用各种函数来读取和写入文件。其中&#xff0c;filename.txt 是要读取或写入的文件名&#xff0c;r 表示读取模式&#xff0c;w 表示写入模式。fscanf 和 fprintf 函数用于读取和写入文件内容&#xff0c;%c 和 %s 是格式说明符…

Python 通过 stomp 发送消息到 ActiveMQ 的代码

只需要下面简单的几行代码&#xff0c;我们就可以把我们本地数据发送到 ActiveMQ 上面去。 def send_mq(data):hosts [(AMQHOST, AMQPORT)]conn stomp.Connection(host_and_portshosts, auto_content_lengthFalse)conn.connect(usernameAMQUSER, passcodeAMQPASS, waitTrue)…

基于Spring Boot的医院预约挂号系统设计与实现

前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb;…

功夫再高也怕菜刀。多年经验,会独立开发的机器视觉工程师,技术太强,但是找工作能力差劲

功夫再高也怕菜刀&#xff0c;专业的事情交给专业的人去做。 今年7月份中旬的时候&#xff0c;遇到一位老朋友&#xff0c;向我咨询某公司的信息&#xff0c;其实我根本不了解这家公司的情况与实力&#xff0c;向他说了&#xff0c;抱歉&#xff0c;我查下&#xff0c;等我晚上…

怎么把利用paddlepaddle导出的json文件转化为yolo或者voc文件

这两天想偷懒&#xff0c;想让模型先在数据上标一遍&#xff0c;然后我再做修正&#xff0c;主要是图个省事。由于我们的业务主要是利用paddle,模型也是基于paddle推理的&#xff0c;因此即便我对paddle有一万个吐槽但也不得不用它。但在利用paddle保存推理结果文件时&#xff…

Linux Day17 生产者消费者

一、生产者消费者问题概述 生产者 / 消费者问题&#xff0c;也被称作有限缓冲问题。两个或者更多的线程共享同一个缓冲 区&#xff0c;其中一个或多个线程作为 “ 生产者 ” 会不断地向缓冲区中添加数据&#xff0c;另一个或者多个线程作为 “ 消费者 ” 从缓冲区中取走数据。…

搭建本地MQTT服务器

环境及所用工具 win10本地环境下&#xff0c;使用docker配置一个mqttbroker&#xff0c;选择emqx docker操作&#xff1a;Docker_liangchaaaaa的博客-CSDN博客 测试使用MQTTX软件 Docker拉取镜像仓库 docker pull emqx/emqx:4.2.5 可以上官网看最新版本&#xff0c;或直接…

vue动态修改浏览器title和icon图标

vue动态修改浏览器title和icon图标 实例代码 setTitleIcon(){var link document.querySelector("link[rel*icon]") || document.createElement(link);link.type image/x-icon;link.rel shortcut icon;link.href /002.png; // 图片放public目录document.getElem…

PHP8的类与对象的基本操作之类的实例化-PHP8知识详解

定义完类和方法后&#xff0c;并不是真正创建一个对象。类和对象可以描述为如下关系。类用来描述具有相同数据结构和特征的“一组对象”&#xff0c;“类”是“对象”的抽象&#xff0c;而“对象”是“类”的具体实例&#xff0c;即一个类中的对象具有相同的“型”&#xff0c;…

循环神经网络-02文本预处理

https://zh-v2.d2l.ai/chapter_recurrent-neural-networks/text-preprocessing.html 本节中&#xff0c;我们将解析文本的常见预处理步骤。 这些步骤通常包括&#xff1a; 将文本作为字符串加载到内存中。 将字符串拆分为词元&#xff08;如单词和字符&#xff09;。 建立一个…

QT---day3---9.19

1> 完成文本编辑器的保存工作 ui界面&#xff1a; 头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QFontDialog> #include <QMessageBox> #include <QColor> #include <QColorDialog> #include <QFo…

计算机竞赛 深度学习 python opencv 实现人脸年龄性别识别

文章目录 0 前言1 项目课题介绍2 关键技术2.1 卷积神经网络2.2 卷积层2.3 池化层2.4 激活函数&#xff1a;2.5 全连接层 3 使用tensorflow中keras模块实现卷积神经网络4 Keras介绍4.1 Keras深度学习模型4.2 Keras中重要的预定义对象4.3 Keras的网络层构造 5 数据集处理训练5.1 …

IDEA全局替换快捷键有大坑---详解

1、ctl shift r 可选择范围最小就是包 那么必然就会造成全局替换过了&#xff01;&#xff01;&#xff01;&#xff01; 2、ctl r实现当前类全局替换 因为这个坑&#xff0c;浪费大爷我2小时。艹

认识一下Git

目录 Git Git下载 Git安装 Git初始化 Git操作 Git、GitLab、和Eclipse是公司中软件开发常用的组合&#xff1a; 1. Git&#xff1a;Git是一种分布式版本控制系统&#xff0c;用于跟踪文件和代码的变化。它提供了管理代码仓库的功能&#xff0c;可以记录每次提交的修改&am…

Python语言:列表初体验

列表是Python中的一个对象&#xff0c;他类似于C语言中的数组&#xff0c;可以存储许多数据&#xff0c;也可以称之为数据集合。他原则是可以存储不同类型的数据&#xff0c;一般不建议这样使用&#xff0c;有点奇怪&#xff1b;一般情况下一个列表中保存的都是同一种类型的数据…

Matlab中 * 与 .* 的区别

* 用于矩阵乘法 示例1&#xff1a; 注&#xff1a; 表示转置&#xff0c;即矩阵a的转置 乘以 矩阵b 根据矩阵乘法&#xff0c;r结果为&#xff1a; 示例2&#xff1a; 矩阵a 乘以 矩阵b的转置 根据矩阵乘法&#xff0c;结果为&#xff1a; .* 用于对应位置单个元素相乘 示例…

【虚幻引擎】UE5 VLC接入网络监控、视频直播、网络直播支持RTSP、RTMP

一、如何更新自己的插件匹配自己想要的UE版本 我们在网上下载的插件一般是UE4版本的插件&#xff0c;这个时候就需要我们自己去修改编译&#xff0c;接下来教大家修改插件来适配自己的引擎。 如果不想自己编译代码&#xff0c;可以直接找我拿编译好的UE5.0、UE5.1、UE5.2的插件…

[hive]搭建hive3.1.2hiveserver2高可用可hive metastore高可用

参考: Apache hive 3.1.2从单机到高可用部署 HiveServer2高可用 Metastore高可用 hive on spark hiveserver2 web UI 高可用集群启动脚本_薛定谔的猫不吃猫粮的博客-CSDN博客 没用里头的hive on spark,测试后发现版本冲突 一、Hive 集群规划(蓝色部分) ck1ck2ck3Secondary…