当前位置: 首页 > news >正文

AT24C1024的模拟IIC驱动

AT24C1024是基于IIC的EEPROM,容量为1024/8=128k bytes。它的引脚如下:

其中A1,A2为硬件地址引脚

WP为写保护引脚,一般我们需要读写,需要接低电平GND,接高的话则仅允许读

SDA和SCL则为IIC通信引脚

芯片通信采用IIC,有关IIC的通信原理可参考:

https://blog.csdn.net/u011436603/article/details/136007075文章浏览阅读293次,点赞5次,收藏8次。这样看起来,区分起止信号与数据电平是不是就更加容易些了,但是嘛由于只有一根数据线了,缺点就是无法同时收发了,因此它是半双工通信的。一般的IIC器件,比如EEPROM,此时会发送要写入或读取的地址,如往0x0000地址写入数字1,那么会先发送0x0000,等到回码后再发送0x01,之后在收到应答后结束通信。前面在讲UART时提到过通信传输所需要的几个必要条件,首先得知道什么时候通信开始,什么时候通信结束,然后就是如何去解析数据了,根据这几点,我们来谈谈IIC是如何实现通信的。从图上可以看到,IIC规定的。https://blog.csdn.net/u011436603/article/details/136007075接下来说下具体的操作流程

读数据:

  1. 启动总线
  2. 发送设备地址+写...等待应答
  3. 发送数据存储地址...等待应答
  4. 发送数据
  5. 结束总线

写数据:

  1. 启动总线
  2. 发送设备地址+写...等待应答
  3. 发送数据存储地址...等待应答
  4. 发送设备地址+读...等待应答
  5. 读数据
  6. 结束总线

本次采用模拟IIC的方式,便于移植,具体的代码如下

void eeprom_start(void)
{IIC_SDA_ON;IIC_SCL_OFF;DELAY_US (10);IIC_SCL_ON;DELAY_US(1);IIC_SDA_OFF;DELAY_US(1);IIC_SCL_OFF;DELAY_US(2);IIC_SCL_OFF;IIC_SDA_ON;DELAY_US(10);
}void eeprom_stop(void)
{IIC_SDA_OFF;IIC_SCL_OFF;DELAY_US(1);IIC_SCL_ON;DELAY_US(1);IIC_SDA_ON;DELAY_US(2);IIC_SCL_OFF;DELAY_US(2);IIC_SCL_OFF;IIC_SDA_ON;DELAY_US(10);
}void eeprom_ack(void)
{IIC_SDA_ON;IIC_SCL_OFF;DELAY_US (10);IIC_SDA_OFF;DELAY_US(1);IIC_SCL_ON;DELAY_US(1);IIC_SCL_OFF;DELAY_US(2);IIC_SCL_OFF;IIC_SDA_ON;DELAY_US(10);
}void eeprom_noack(void)
{IIC_SDA_ON;IIC_SCL_OFF;DELAY_US (10);IIC_SCL_ON;DELAY_US(1);IIC_SCL_OFF;DELAY_US(2);IIC_SCL_OFF;IIC_SDA_ON;DELAY_US(10);
}void eeprom_checkack(void)
{IIC_SCL_ON;DELAY_US(10);IIC_SCL_OFF;
}void eeprom_write_byte(unsigned char ucChar)
{unsigned char i;IIC_SDA_ON;IIC_SCL_OFF;DELAY_US (10);for(i=0; i<8; i++){if(!(ucChar & BIT(7-i)) == 0)  IIC_SDA_ON;else                           IIC_SDA_OFF;DELAY_US (1);IIC_SCL_ON;DELAY_US(1);IIC_SCL_OFF;DELAY_US(2);}IIC_SCL_OFF;IIC_SDA_ON;DELAY_US(10);
}unsigned char eeprom_read_byte(void)
{unsigned char i;unsigned char ucChar = 0;for(i=0; i<8; i++){if(IIC_SDA_VALUE == 1){ucChar |= BIT(7 - i);}else{ucChar &= ~BIT(7 - i);}IIC_SCL_ON;DELAY_US(1);IIC_SCL_OFF;DELAY_US(2);}IIC_SCL_OFF;IIC_SDA_ON;DELAY_US(10);return ucChar;
}
void eeprom_write_char(unsigned int nAddress,unsigned char ucChar)
{eeprom_start();if(nAddress>=0x10000)    eeprom_write_byte(0xa2);else                     eeprom_write_byte(0xa0);eeprom_checkack();eeprom_write_byte(nAddress/256);                               eeprom_checkack();eeprom_write_byte(nAddress%256);                          eeprom_checkack();eeprom_write_byte(ucChar);eeprom_checkack();eeprom_stop();                                if(nAddress%256 == 0) DELAY_MS(100);else DELAY_MS(8);
}unsigned char eeprom_read_char(unsigned int nAddress)
{unsigned char ucChar;eeprom_start();                                      if(nAddress>=0x10000)    eeprom_write_byte(0xa2);else                     eeprom_write_byte(0xa0);eeprom_checkack();eeprom_write_byte(nAddress/256);                        eeprom_checkack();eeprom_write_byte(nAddress%256);                eeprom_checkack();eeprom_start();                                             if(nAddress>=0x10000)    eeprom_write_byte(0xa3);else                     eeprom_write_byte(0xa1);eeprom_checkack();ucChar = eeprom_read_byte();eeprom_noack();eeprom_stop();DELAY_US(10);return  ucChar;
}

其中IIC_SCL_ON和IIC_SCL_OFF表示SCL引脚电平拉高或拉低,

IIC_SDA_ON和IIC_SDA_OFF表示SDA引脚电平拉高或拉低,IIC_SDA_VALUE表示读取SDA引脚电平。需要注意的是,模拟IIC时引脚需要设置为开漏输出且需要上拉电阻。

有两个需要注意的点,一个是器件地址指令,当写存储地址处于前一半时,发送A0指令,当写存储地址处于后一半时,发送A2指令。另一个则是跨页写,每256字节为一页,当出现跨页写时,需要增大延时,否则有可能出错。

相关文章:

AT24C1024的模拟IIC驱动

AT24C1024是基于IIC的EEPROM&#xff0c;容量为1024/8128k bytes。它的引脚如下&#xff1a; 其中A1,A2为硬件地址引脚 WP为写保护引脚&#xff0c;一般我们需要读写&#xff0c;需要接低电平GND&#xff0c;接高的话则仅允许读 SDA和SCL则为IIC通信引脚 芯片通信采用IIC&…...

Stable Diffusion生成式扩散模型代码实现原理

Stable Diffusion可以使用PyTorch或TensorFlow等深度学习框架来实现。这些框架提供了一系列的工具和函数&#xff0c;使得开发者可以更方便地构建、训练和部署深度学习模型。因此可以使用PyTorch或TensorFlow来实现Stable Diffusion模型。 安装PyTorch&#xff1a;确保您已经安…...

解决Keepalived “脑裂”(双VIP)问题

1. 检查广播情况 yum install tcpdump -y tcpdump -i ens33 vrrp -n master 192.168.80.130 与 backup: 192.168.80.131都在广播&#xff0c;正常情况下backup应该是不在广播的&#xff0c;所以可以判断存在防火墙屏蔽vrrp问题&#xff0c;需要设置VRRP过掉防火墙&#xff0…...

cAdvisor+Prometheus+Grafana 搞定Docker容器监控平台

cAdvisorPrometheusGrafana cAdvisorPrometheusGrafana 搞定Docker容器监控平台1、先给虚拟机上传cadvisor2、What is Prometheus?2.1、架构图 3、利用docker安装普罗米修斯4、安装grafana cAdvisorPrometheusGrafana 搞定Docker容器监控平台 1、先给虚拟机上传cadvisor cAd…...

java基础知识面试题

下面是关于java基础知识的一些常见面试题 equals 与区别 在Java中&#xff0c;""是一个比较操作符&#xff0c;用于比较两个变量的值是否相等。而"equals()"是Object类中定义的方法&#xff0c;用于比较两个对象是否相等。 具体区别如下&#xff1a; &…...

科技云报道:黑马Groq单挑英伟达,AI芯片要变天?

科技云报道原创。 近一周来&#xff0c;大模型领域重磅产品接连推出&#xff1a;OpenAI发布“文字生视频”大模型Sora&#xff1b;Meta发布视频预测大模型 V-JEPA&#xff1b;谷歌发布大模型 Gemini 1.5 Pro&#xff0c;更毫无预兆地发布了开源模型Gemma… 难怪网友们感叹&am…...

解决i18n国际化可读性问题,傻瓜式webpack中文支持国际化插件开发

先来看最后的效果 问题 用过国际化i18n的朋友都知道&#xff0c;天下苦国际化久矣&#xff0c;尤其是中文为母语的开发者&#xff0c;在面对代码中一堆的$t(abc.def)这种一点也不直观毫无可读性的代码&#xff0c;根本不知道自己写了啥 &#xff08;如上图&#xff0c;你看得出…...

【Django】执行查询—F()表达式

F() F()可以实现将模型字段值与同一模型中的另一字段做比较。举个例子看一下&#xff1a; class Entry(models.Model):...number_of_comments models.IntegerField(default0)number_of_pingbacks models.IntegerField(default0)...找到所有 number_of_pingbacks 大于 numbe…...

202112CSPT4磁盘文件操作

题意&#xff1a;有n个id号&#xff0c;m段空间&#xff0c;k个操作&#xff1a; 0 0 0:从L开始到R或遇到第一个其他非空id号为止&#xff0c;写入 i d id id号以及值 v a l val val&#xff1b;如果成功写入则输出写入成功的最右位置&#xff0c;否则输出-1 1 1 1:若 [ L , …...

5GC SBA架构

协议标准&#xff1a;Directory Listing /ftp/Specs/archive/23_series/23.501/ (3gpp.org) NF描述说明NSSFNetwork Slice Selection Function网络切片选择&#xff0c;根据UE的切片选择辅助信息、签约信息等确定UE允许接入的网络切片实例。NEF Network Exposure Function网络开…...

《求生之路2》服务器如何选择合适的内存和CPU核心数,以避免丢包和延迟高?

根据求生之路2服务器的实际案例分析选择合适的内存和CPU核心数以避免丢包和延迟高的问题&#xff0c;首先需要考虑游戏的类型和对服务器配置的具体要求。《求生之路2》作为一款多人在线射击游戏&#xff0c;其服务器和网络优化对于玩家体验至关重要。 首先&#xff0c;考虑到游…...

精读服务器默认rsyslog的配置文件

rsyslog的配置文件 rsyslog.conf #### MODULES ####$ModLoad imuxsock # provides support for local system logging (e.g. via logger command) $ModLoad imjournal # provides access to the systemd journal #$ModLoad imklog # reads kernel messages (the same are read…...

Vue2:用node+express部署Vue项目

一、编译项目 命令 npm run build执行命令后&#xff0c;我们会在项目文件夹中看到如下生成的文件 二、部署Vue项目 接上一篇&#xff0c;nodeexpress编写轻量级服务 1、在demo中创建static文件夹 2、将dist目录中的文件放入static中 3、修改server.js文件 关键配置&…...

前端开发人员如何做好SEO

前端开发人员如何做好SEO SEO工作不仅限于专业人员。前端开发者也可以在日常开发中实施一些代码层面的SEO优化。 以下是一些前端常用的SEO方法&#xff1a; 设置合理的title、keywords、description title、keywords、description对SEO至关重要&#xff0c;需贴合页面内容编…...

推荐收藏!分享 PyTorch 中一些高级的索引和选择操作技巧

关于 Pytorch &#xff0c;我之前分享过很多篇&#xff0c;喜欢的可以收藏、关注、点赞。 这一次&#xff0c;我准备了 20节 PyTorch 中文课程小白学 PyTorch 系列&#xff1a;54个超强 pytorch 操作9个技巧让你的 PyTorch 模型训练飞快&#xff01;Keras 3.0发布&#xff1a;…...

Apache Calcite 快速入门指南

Apache Calcite 快速入门指南 参考地址&#xff1a;Apache Calcite 快速入门指南 - 知乎 Apache Calcite 是一个动态数据管理框架&#xff0c;提供了&#xff1a;SQL 解析、SQL 校验、SQL 查询优化、SQL 生成以及数据连接查询等典型数据库管理功能。Calcite 的目标是 One Size …...

基于MUSIC算法的六阵元圆阵DOA估计matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于MUSIC算法的六阵元圆阵DOA估计matlab仿真. 2.测试软件版本以及运行结果展示 MATLAB2022a版本运行 3.核心程序 ........................................…...

Mysql索引学习

mysql索引-自学版 1 索引语法2 索引类别3 索引原理磁盘IO与预读索引数据结构 B树B树的前生今世B 树代码&#xff08;进阶&#xff09; 4 索引使用策略及优化优化索引的几种方法 索引常见面试题面经实战 1 索引语法 索引的语法&#xff1a;创建、修改、增加、删除等操作&#x…...

【MySQL】:高效利用MySQL函数实用指南

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; MySQL从入门到进阶 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一. MySQL函数概论二. 字符串函数三. 数值函数四. 日期函数五. 流程函数&#x1…...

vue3+electron开发桌面应用,静态资源处理方式及路径问题总结

目录 1、静态资源放到src/assets/目录下 2、静态路径和动态路径的写法 3、编译时vite.config.js的配置...

如何规避SQL存储过程注入_严格清洗变量并使用预处理

SQL Server动态SQL注入的根本原因是字符串拼接&#xff0c;唯一有效防御是全程参数化&#xff1a;值必须用sp_executesql参数绑定&#xff0c;表名列名等无法参数化的部分须白名单校验。SQL Server 存储过程中 EXEC 动态拼接字符串时为什么总被注入&#xff1f;因为 EXEC&#…...

别再搞错架构了!保姆级教程:CentOS 7 换源(阿里/清华/网易)区分x86_64与aarch64

别再搞错架构了&#xff01;保姆级教程&#xff1a;CentOS 7 换源&#xff08;阿里/清华/网易&#xff09;区分x86_64与aarch64 上周深夜&#xff0c;一位朋友突然发来紧急求助——他在MacBook Pro M1上通过UTM虚拟机安装的CentOS 7系统&#xff0c;连续尝试了五六个换源教程都…...

Springboot 实现多数据源(PostgreSQL 和 SQL Server)连接淤

一、环境准备 Free Spire.Doc for Python 是免费 Python 文档处理库&#xff0c;无需依赖 Microsoft Word&#xff0c;支持 Word 文档的创建、编辑、转换等操作&#xff0c;其中内置的 Markdown 解析能力&#xff0c;能高效实现 Markdown 到 Doc/Docx 格式的转换&#xff0c;且…...

5分钟快速上手OHIF-Viewers:零基础搭建医学影像DICOMweb阅片环境

5分钟快速上手OHIF-Viewers&#xff1a;零基础搭建医学影像DICOMweb阅片环境 医学影像数字化阅片已成为现代医疗信息化的核心需求。对于刚接触医疗IT的临床转技术人员或医疗信息化初学者而言&#xff0c;如何快速搭建一个符合DICOMweb标准的阅片环境常常令人望而生畏。本文将带…...

ClawdBot快速入门:详细教程解决devices approve授权问题

ClawdBot快速入门&#xff1a;详细教程解决devices approve授权问题 1. ClawdBot简介&#xff1a;你的本地AI助手 ClawdBot是一个可以在个人设备上运行的个人AI助手&#xff0c;它使用vLLM提供后端模型能力。与依赖云端服务的AI助手不同&#xff0c;ClawdBot完全在本地运行&a…...

打破生态壁垒:让Windows电脑完美变身AirPlay 2接收器的终极方案

打破生态壁垒&#xff1a;让Windows电脑完美变身AirPlay 2接收器的终极方案 【免费下载链接】airplay2-win Airplay2 for windows 项目地址: https://gitcode.com/gh_mirrors/ai/airplay2-win 还在为Windows电脑无法接收iPhone、iPad投屏而烦恼吗&#xff1f;Airplay2-W…...

语音信号处理中的频谱特征:幅度谱、相位谱、能量谱的区别与应用场景

语音信号处理中的频谱特征&#xff1a;幅度谱、相位谱、能量谱的区别与应用场景 在语音信号处理领域&#xff0c;频谱分析是理解声音本质的核心工具。当我们面对一段录音时&#xff0c;时域波形只能告诉我们声音的振幅随时间变化的情况&#xff0c;而频域分析则揭示了声音的&qu…...

告别繁琐!WinRAR在Win11右键菜单的两种高效配置方案全解析

Win11右键菜单的WinRAR终极优化指南&#xff1a;极简派与功能派的完美平衡术 每次在Windows 11的资源管理器里右键点击压缩文件时&#xff0c;那个冗长的WinRAR子菜单是否让你感到效率受阻&#xff1f;作为一款装机量超过5亿的压缩工具&#xff0c;WinRAR在Windows 11上的右键菜…...

终极Windows键盘重映射指南:用SharpKeys彻底解决误触烦恼

终极Windows键盘重映射指南&#xff1a;用SharpKeys彻底解决误触烦恼 【免费下载链接】sharpkeys SharpKeys is a utility that manages a Registry key that allows Windows to remap one key to any other key. 项目地址: https://gitcode.com/gh_mirrors/sh/sharpkeys …...

新能源 / 智能驾驶常见面试题及答案汇总(2026 最新版)

从三电到端到端大模型&#xff0c;一文掌握新能源汽车行业面试通关密码 2026年春节后&#xff0c;中国新能源汽车行业迎来了史上最激烈的人才争夺战。智联招聘最新发布的《2026年新质生产力人才报告》显示&#xff0c;智能驾驶系统工程师岗位需供比已飙升至16:1&#xff0c;成为…...