跟着原子学I2C

news2024/10/6 16:22:20

I2C通讯

1、IIC总线介绍

集成电路总线,是一种同步串行半双工通信总线。

总线or协议?!

总线是数据传输通道,协议是数据传输规则。

1、1介绍

a、由时钟线SCL和数据线SDA组成,并且都接上拉电阻,确保总线空闲状态为高电平。

b、总线支持多设备连接,允许多主机存在,每个设备都有一个唯一的地址。

c、连接到总线上的数目受总线的最大电容400pf限制

d、数据传输速率:标准模式100k bit/s 快速模式400k bit/s 高速模式3.4M bit/s。

1、2归纳

三个信号: 起始信号、停止信号、应答信号。

两个注意:数据有效性、数据传输顺序。

一个状态:空闲状态。

起始信号:当SCL为高电平时,SDA从高电平变为低电平。

停止信号:当SCL为高电平时,SDA从低电平变为高电平。

应答信号:上拉电阻影响下SDA默认为高,而从机拉低SDA就是确认收到数据,为ACK,如果没有收到,为NACK。

数据先发送高位,数据以字节(8bit)传输,数据在SCL高电平稳定。

空闲状态:SCL、SDA都是高电平。

1、3跟着正点原子写代码

起始信号

/*SDA、SCL开始都处于高电平,SCL为高电平期间,SDA从高到低跳变*/
void iic_start(void)
{
 IIC_SDA(1);
 IIC_SCL(1);
 IIC_delay();//delay时间看器件
 IIC_SDA(0);
 IIC_delay();
 IIC_SCL(0);//SCL拉低,钳住总线,准备发送/接收数据
 IIC_delay();
}

停止信号

/*SCL为高电平期间,SDA从低电平往高电平跳变*/
void iic_stop(void)
{ 
   IIC_SDA(0);
   IIC_delay();
   IIC_SCL(1);
   IIC_delay();
   IIC_SDA(1);
   IIC_delay();
}

检测应答信号(主机)

//return:  1:fail  0:succeed
uint8_t iic_wait_ack(void) 
{
   IIC_SDA(1);//主机释放SDA线
   IIC_delay();
   IIC_SCL(1);//从机返回ACK
   IIC_delay();
   if(IIC_READ_SDA)//SCL高电平读取SDA状态
   {
      iic_stop();//SDA高电平表示从机NACK
      return 1;
   }
   IIC_SCL(0);
   iic_delay();
   return 0;
}

发送应答信号

void iic_ack(void)
{ 
  IIC_SCL(0);
  IIC_delay();
  IIC_SDA(0);
  IIC_delay();
  IIC_SCL(1);
  IIC_delay();
}

发送非应答信号

void iic_ack(void)
{   
IIC_SCL(0); 
IIC_delay();
IIC_SDA(1);
IIC_delay(); 
IIC_SCL(1); 
IIC_delay();
}
发送1字节数据
void  iic_send_byte(uint8_t  data)
{
  for(uint8_t t=0;t<8;t++)
  {
      IIC_SDA((data&0x80)>>7);
      IIC_delay(); 
      IIC_SCL(1); 
      IIC_delay();
      IIC_SCL(0);
      data<<=1;//左移1位,用于下一次发送   
    }
    IIC_SDA(1);//发送完成,主机释放SDA线
    
}

读取1字节数据

void  iic_read_byte(uint8_t  ack)
{
  uint8_t receive =0;
  for(uint8_t t=0;t<8;t++)
  {
  receive<<1;//高位先输出,先收到的数据位要左移
  IIC_SCL(1);
  IIC_delay();
  if(IIC_READ_SDA)receive++;
  IIC_SCL(0);
  IIC_delay();
  }
  if(!ack)iic_nack();
  else iic_ack();
  return receive;
}

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

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

相关文章

UDP套接字

大家好,又见面了,&#x1f389;&#x1f389;&#x1f389;&#x1f338;&#x1f338;&#x1f338; 今天为大家带来UDP套接字的相关知识 文章目录认识socketUDP和TCP认识UDPAPI有关方法基于UDP实现回显服务器UDP的方法基于UDP实现回显程序认识socket UDP和TCP 认识UDPAPI有…

【数据结构】二叉树的概念及结构

&#x1f680;write in front&#x1f680; &#x1f4dc;所属专栏&#xff1a; 初阶数据结构 &#x1f6f0;️博客主页&#xff1a;睿睿的博客主页 &#x1f6f0;️代码仓库&#xff1a;&#x1f389;VS2022_C语言仓库 &#x1f3a1;您的点赞、关注、收藏、评论&#xff0c;是…

Linux内核设备驱动设备树概念与使用

一、设备树概念以及作用 1.1设备树概念 设备树(Device Tree)&#xff0c;将这个词分开就是“设备”和“树”&#xff0c;描述设备树的文件叫做 DTS(DeviceTree Source)&#xff0c;这个 DTS 文件采用树形结构描述板级设备&#xff0c;也就是开发板上的设备信息&#xff0c;比…

prometheus基本介绍

001 基本介绍 1.主要功能 多维数据模型&#xff08;时序由metric名字和k/v的labels构成&#xff09;灵活的查询语句无依赖存储&#xff0c;支持local和remote不同的模型采用http协议&#xff0c;使用pull模式&#xff0c;拉取数据&#xff0c;简单易懂监控目标&#xff0c;可…

session,zookeeper,mq-rabbitmq,kafka,websocket

spring-boot-demo-session pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://…

INSERT INTO IF NOT EXISTS问题

情景说明&#xff1a;工作上遇到一个树形结构的数据&#xff0c;如有文件夹和子文件夹这样的数据。由于后端逻辑问题&#xff0c;导致在前端页面操作了删除功能后&#xff0c;数据库中仅部分数据被删除&#xff0c;比如只把根节点或是父节点删除了&#xff0c;没有级联删除所有…

九龙证券|什么是庄家洗盘和出货?各有什么特征?

在股市独占的是庄家&#xff0c;在市场上独占的是商人。庄家的存在便是为了把资金投入市场变成本钱&#xff0c;使用本钱获取最大赢利。庄家的各类方法也是为了不惜一切代价获取最大赢利。今天我们来了解什么是庄家洗盘和出货&#xff1f;各有什么特征&#xff1f;下面就为大家…

所有知识付费都可以用 ChatGPT 再割一次?

伴随春天一起到来的&#xff0c;还有如雨后春笋般冒出的 ChatGPT / AI 相关的付费社群、课程训练营、知识星球等。 ChatGPT 吹来的这股 AI 热潮&#xff0c;这几个月想必大家多多少少都能感受到。 ▲ 图片来源&#xff1a;网络 这两张图是最近在圈子里看到的。 一张是国内各…

SpringBoot —— 日志基本操作

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ SpringBoot —— 日志基本操作一、日志的作用二…

Adobe全家桶功能介绍

Adobe全家桶是一套由Adobe公司开发的创意设计软件集合&#xff0c;包含了许多功能强大的软件&#xff0c;可以帮助用户完成各种创意设计任务。 以下是Adobe全家桶中一些主要软件的功能介绍&#xff1a; Photoshop&#xff1a;用于图像处理和编辑&#xff0c;可以进行图像裁剪…

Gradio介绍

Gradio App 就是给 AI 算法工程师训练的模型赋予分享给大众的能力。 从技术侧拆分&#xff0c;由三个部分组成&#xff1a; 前端页面 后端接口 AI算法模型推理 Gradio 做了一件事情&#xff0c;就是将这三个部分封装到一个 python 接口里&#xff0c;用户通过实现其封装的…

进来拿!最近疯传的154页微软 GPT-4早期实验报告:探究 AGI进化之路(全中文版)

这应该是&#xff0c;最近一段时间以来&#xff0c;关于 ChatGPT4.0剖析最全面的一份报告。 看懂10%&#xff0c;能帮我们对 ChatGPT 的认识&#xff0c;有一个质的跃升&#xff1b; 看懂50%&#xff0c;你将是分享 ChatGPT 知识领域最顶尖的那一拨人。 这份报告证明了 GPT-4…

Prometheus+Mysqld_exporter+Grafana从0到1搭建MySQL的可视化监控

目 录1. 准备工作1.1 安装MySQL1.2 安装Prometheus1.3 安装Mysqld_exporter1.4 安装Grafana2. 更改配置2.1 配置Mysqld_exporter2.2 配置Prometheus2.3 配置Grafana3. 小 结1. 准备工作 安装 MySQL 数据库安装 Prometheus安装 Mysqld_exporter安装 Grafana 在正式开始搭建之前…

面试官:如何在命令行跑Postman?

在接口自动化过程中&#xff0c;每次都打开postman工具来手动运行脚本显得不智能&#xff0c;所以可以通过命令在无UI或者其他持续集成的平台上执行脚本和数据。 01、环境准备与检查 环境准备 导出collection 安装node.js和cnpm 安装newman 环境检查 检测node.js&#x…

加密组件Jasypt学习、实战及踩坑记录

概述 最近入职新公司&#xff0c;因几乎全部项目都使用到jasypt&#xff0c;故而初步学习记录下本文&#xff08;持续更新&#xff09;。 官网及GitHub给出的简介&#xff1a;使用简单&#xff0c;性能好&#xff0c;特性features非常丰富&#xff1b;支持 另&#xff0c;有个…

leetcode刷题——字符串(双指针、滑动窗口、动态规划)

文章目录3.无重复字符的最长子串5.最长回文子串8. 字符串转换整数 (atoi)3.无重复字符的最长子串 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 //双指针滑动窗口数组hash int lengthOfLongestSubstring(char * s){int hash[127] {0}; //…

生产管理系统是什么?它有哪些功能模块?

阅读本文您将了解&#xff1a;1.企业生产管理的问题&#xff1b;2.生产管理系统模块有哪些&#xff1b;3.如何利用生产管理系统模块解决问题。 一、企业生产管理会遇到哪些问题&#xff1f; 生产管理是有计划、组织、指挥、监督调节的生产活动。以最少的资源损耗&#xff0c;…

Qt Quick - Menu

Qt Quick - Menu使用总结一、概述二、上下文菜单三、弹出式菜单四、子菜单和Action五、美化一、概述 Menu其实就是Qt Quick里面的菜单控件&#xff0c;一般来说。 Menu有两种主要用例: 上下文菜单&#xff1b;例如&#xff0c;右键单击后显示的菜单弹出菜单&#xff1b;例如…

高比例可再生能源电力系统的调峰成本量化与分摊模型(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

VSCode远程调试linux

文章目录前言1. 给从机安装GCC与GDB2. 编写测试 .c文件3. 本地编译生成可执行文件4. VSCode配置4.1 拓展安装4.2 ssh连接与配置4.3 配置debug5. 开启调试前言 这个调试是基于迅为itop3568板子进行调试的&#xff0c;如果你的不是这个板子&#xff0c;其实其他的也差不多流程。…