国科安芯推出的AS32X601内置的I2C模块提供了符合工业标准的两线串行制接口,可用于MCU和外部IIC设备的通讯。IIC总线使用两条串行线:串行数据线SDA和串行时钟线SCL。 IIC接口模块实现了IIC协议的标准模式和快速模式,支持多主机IIC总线架构。其中标准模式为100K,快速模式400K。

  • 硬件设计

I2C 总线内部使用漏极开路输出驱动器,因此 SDA和 SCL 可以被拉低为低电平,但是不能被驱动为高电平,所以每条线上都要使用一个4.7K上拉电阻,默认情况下将其保持在高电平。

  • I2C时序

①Start开始信号、Stop停止信号:

这两个信号由主机产生,不属于数据域交互:

在SCL的高电平时,主机将SDA的电平由 高–>低是Start信号(下降沿);

在SCL的高电平时,主机将SDA的电平由 低–>高是Stop信号(上升沿);

②7位寻址

AS32X601的I2C只支持7位寻址模式,配置过程中从机地址需要左移1位才为实际地址。

③数据方向

0写/1读

④应答ACK、非应答NACK

在SCL的一个时钟周期内,从机在SCL的高电平时,将SDA的电平由高拉低(或者继续保持低电平状态) 则是ACK信号;

从机在SCL的高电平时,如果SDA的电平一直是 高电平 则是NACK信号;

  • 时钟

I2C0、I2C1时钟来自APB0,I2C2、I2C3时钟来自ABP1。具体配置可见I2C_CTLR寄存器。

  • 软件编程

  1. 配置I2Cx需要的GPIO为复用功能。

  2. 通过配置I2C_INITSTRUCT初始化I2Cx,包括时钟分频,从机地址,ACK,高低电平时间等。

3. 按需求配置中断,并配置IRQ_HANDLER;

4. 调用收发接口,并处理数据

  • I2C挂死原因解析

由于I2C采用线与结构,只要总线上任何一个器件拉低了SDA或者SCL,其他器件都无法拉高它们,看到的都是低电平。如果有器件不释放总线,则整个总线上的通讯都会被暂停 。

在实际操作中,I2C主是可编程器件,如果主机主动拉低了总线,可以通过调试代码了解原因,也可以通过复位I2C外设或者复位芯片来退出。而I2C从机往往不带RESET引脚,如果挂死了总线即使整个系统复位都无法解除,仅重新上下电才可以恢复,因此分析I2C从机挂死。

首先I2C从机在两种情况下会拉低SDA线。

①主机向从机写数据或地址时,从机如果发出ACK应答,则会第9个CLK的期间拉低SDA;

②主机读数据的时候,从机会在bit为0时对应的CLK期间拉低SDA。

根据I2C协议,SCL为高的时候,SDA电平应保持,而等到SCL为低后(也就是下降沿后)才能发生改变。若SCL拉高后主机不再拉低,从机会持续拉低SDA,直到见到SDA的下降沿。

最常见的情况是主机在通讯的过程中产生了复位。由于复位动作通常会立刻执行,外设状态机都恢复到默认状态,也就发不出完整的CLK。那么等到主机复位完成回来后,SCL为高,SDA被从机拉低。主机无法发起START起始条件,不能开始下一次与从机的通讯,这称为SDA挂死。

我们一般情况下用GPIO在SCL线上模拟一个下降沿,让从机状态机继续走下去。只发一个下降沿并不一定能将SDA释放,因为并不清楚当主机复位异常发生时刻从机到底处于哪一个状态,所以需要逐个CLOCK去抓波形,直到见到SDA被释放了,我们才终止并且发送STOP条件告诉从机这次通讯结束。

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

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

相关文章

钉钉小程序开发实战:打造一个简约风格的登录页面

在上一篇文章中,我们已经介绍了如何搭建钉钉小程序的基础环境,并完成了项目的初始化配置。本文将继续深入,手把手带你实现一个简约风格的登录页面,这是大多数企业级应用不可或缺的一部分。 钉钉小程序基于前端 Web 技术栈&#x…

论文研读2-1:多GNSS双历元纯相位定位-模型建立与误差分析

后续文章: 论文研读2-2:多GNSS双历元纯相位定位-固定模糊度精度增益 论文研读2-3:多GNSS双历元纯相位定位-定位精度分析 仅相位定位中的模糊度解算问题 在卫星导航定位中,载波相位测量是实现高精度定位的基础,但如果仅使用相位测…

Python----OpenCV(图像増强——图像平滑、均值滤波、高斯滤波、中值滤波、双边滤波)

Python----计算机视觉处理(Opencv:图像噪点消除:滤波算法,噪点消除) 一、图像平滑 图像平滑处理(Smoothing Images),也称为图像模糊处理、图像滤波(Images Filtering&am…

笔记:使用EasyExcel导入csv文件出现编码问题,导致导入数据全为null的解决方法

笔记:使用EasyExcel导入csv文件出现编码问题,导致导入数据全为null的解决方法 通常情况下,我们使用excel导入,但是部分情况下或者领导要求,我们需要使用csv导入文件,但是csv文件模板下载之后会变成系统当前…

NL2SQL(Natural Language to SQL)优化之道:提升准确率与复杂查询能力

自然语言 → SQL 的转译(NL2SQL)技术,是让非技术用户与数据库“对话”的桥梁。而在实际应用中,我们不仅需要“能转”,更要“转得准、转得全、转得快”。 一、什么是 NL2SQL? NL2SQL(Natural La…

java中map的循环方式

什么是Map集合? Map是Java中的一个接口,它用于存储键-值对,并且键和值都可以是任意对象。它是Java集合框架中的一部分,并提供了一些方法来操作和访问Map中的元素。 Map中的每个键都是唯一的,这意味着不能使用相同的键…

python学习笔记(深度学习)

文章目录 1、概述2、学习内容2.1、pytorch 常见语法2.1.1、sum2.1.2、广播机制2.1.3、张量2.1.4、DataLoader 2.2、普通语法2.2.1、迭代器 1、概述 本篇博客用来记录,在深度学习过程中,常用的 python 语法内容 2、学习内容 2.1、pytorch 常见语法 2.…

力扣网C语言编程题:搜索二维矩阵(右上角->左下角解法)

一. 简介 上一篇文章关于"在二维数组中查找某个元素"的问题,提供了两种解题思路,文章如下: 力扣网C语言编程题:搜索二维矩阵的普通解法与二分查找法-CSDN博客 本文提供第三种解题思路:从左下角->右上角…

AI大模型流式输出,OkHttp Log拦截打印方案

背景: 使用okhttp框架进行网络访问时,一般会使用 HttpLoggingInterceptor 打印请求和响应的log。在使用okhttp访问AI大模型时,如果选择流式输出,那么响应的body数据使用的SSE技术,服务异步发送大模型生成的增量token&…

看数据世界的历史:全面梳理从关系库、大数据到AI时代的数据发展及展望

序章 在数据库不断发展的时代里,我们看到了关系型数据库(RDB)在一次次的数据演变过程中的占据王位,捍卫了胜利,像一个王朝更替下的“王权”的故事,精彩有趣。 本篇就来探讨下数据库的发展兴衰史&#xff0…

元宇宙与人工智能的融合:从虚拟世界到智能生态的IT新革命

文章目录 引言:前沿技术重塑数字交互体验一、元宇宙与AI融合的本质:虚拟空间与智能交互的交汇元宇宙赋能AI:AI赋能元宇宙: 二、元宇宙与AI融合的演进:从概念到产业热潮三、核心技术:元宇宙与AI融合的基石与…

问卷调查[mqtt dht]

任务 this code uses esp32-wroom-32 and dht11 to read the humidty and temperature, besieds, it will send the meassage to the cloud platform. All communication is conducted through MQTT. 打分标准 您应该对以下代码进行评级,并且必须遵守如…

swift 对象转Json

在 Swift 中将对象转换为 JSON 可以通过以下方法实现: 使用 Codable 协议 Swift 的 Codable 协议(Encodable 和 Decodable 的组合)是处理 JSON 编码和解码的推荐方式。 struct Person: Codable {var name: Stringvar age: Int }let person…

Python学习Day43

学习来源:浙大疏锦行 import torch import torch.nn as nn import torch.nn.functional as F import torchvision import torchvision.transforms as transforms import numpy as np import matplotlib.pyplot as plt from PIL import Image import os # 设置随机…

了解一下Unity AssetBundle 的几种加载方式

Unity 的 AssetBundle 系统提供了多种加载方式,以满足不同场景下的资源管理和性能需求。 同步加载(LoadFromFile) 同步加载使用 AssetBundle.LoadFromFile 方法从文件系统中直接加载 AssetBundle。这种方式会阻塞主线程,直到加载…

鸿蒙边缘智能计算架构实战:多线程图像采集与高可靠缓冲设计

目录 一、技术背景与挑战二、鸿蒙边缘计算架构的核心特性1. 分布式软总线:打破设备孤岛2. 轻量化多线程模型 三、多线程图像采集的稳定性设计1. 分层缓冲队列架构2. 线程优先级策略 四、边缘侧高可靠缓冲机制1. 基于分布式数据管理的容错设计2. 动态带宽调节 五、实…

excel中vba开发工具

1、支持单元格点击出现弹框进行选择 支持模多次模糊查询 Private Sub CommandButton1_Click() Call vehicle_查询 End SubPrivate Sub Worksheet_Activate()Call vehicle_取出车架号和公司名称 取出不重复的车架号Sheet13.ComboBox1.Visible False 车架号显示Sheet13.ComboB…

CatBoost:征服类别型特征的梯度提升王者

基于有序提升与对称树的下一代GBDT框架,重塑高维分类数据处理范式 一、CatBoost的诞生:解决类别特征的终极挑战 2017年由俄罗斯Yandex团队开源,CatBoost(Categorical Boosting)直指机器学习中的核心痛点:类…

使用 WSL 启动ubuntu.tar文件

使用 WSL 启动ubuntu.tar文件,可按以下步骤进行3: 检查 WSL 版本:确保你的 WSL 版本为 2.4.8 或更高版本。可以在命令行中输入wsl --update来更新 WSL 到最新版本。 设置默认 WSL 版本:如果还没有将 WSL 2 设置为默认版本&#x…

vue-23(创建用于逻辑提取的可重用组合组件)

创建用于逻辑提取的可重用组合组件 可重用的组合式是 Vue 组合式 API 的基石,它使你能够在多个组件中提取和重用有状态逻辑。这有助于编写更清晰的代码,减少冗余,并提高可维护性。通过将特定功能封装到组合式中,你可以轻松地共享…