STM32读取EEPROM存储芯片AT24C512故障然后排坑记录

2023-12-14 11:20

本文主要是介绍STM32读取EEPROM存储芯片AT24C512故障然后排坑记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景:

有一个项目用到STM32F091芯片去读取 AT24C512C-SSHD  EEPROM 芯片,我直接移植了之前项目的IIC库,结果程序运行后,读不出EEPROM里面的数据。

摘要:

本文主要介绍一个基于STM32F091芯片和AT24C512C-SSHD EEPROM芯片的项目,该项目旨在读取EEPROM芯片中的数据。我直接移植了之前项目的库,但是遇到了读不出EEPROM数据的问题。本文记录了问题的发型与排查过程。

运行开发环境介绍

硬件环境

STM32F091CBT6

J-LINK  V11

软件开发环境

IAR 8.32.1 

VSCODE 

软件支持包ST HAL 库

正文:

来到新公司后接了一个项目,用到STM32F091芯片去读取 AT24C512C-SSHD  EEPROM 芯片,我直接移植了之前项目的IIC驱动库,结果程序运行后,读不出EEPROM里面的数据。

解决方法:

1.单步仿真,在IIC驱动部门的SCL和SDA 拉高和拉低之后打断点,然后单步运行,用万用表测量电压,看SCL 和SDA线的电平变化是否正常。

2.重新查看EEPROM芯片数据手册,搜索定位问题。

实验结果:

解决方法1:

单步仿真,用电压表量电压,发现电压变化正常。

解决方法2:

重新查看数据手册,发现了下面的东东:

大体意思就是说, AT24C512C Device Address 的地址字中

A0 A1 A2 代表着EEPROM芯片的IIC通讯地址。

而且设备地址的LSB最后一位还代表着不同的读写模式。

 再看一下我的电路图,可以看到,我的电路中A0是1,A1 A2 为 0 

可以看到我发送的器件地址为  0xA0,这就是因为我直接用的之前AT24C512 的 IIC  驱动库,没有注意到芯片的地址是可更改的。

所以程序中应该将地址改为:0xA8

容易踩的坑:

AT24C系列EEPROM的IIC通讯器件地址是可以硬件配置的!

移植原有代码的时候,特别是像我这样跳槽了后注意不同硬件设计人员的设计习惯不一样!

这篇关于STM32读取EEPROM存储芯片AT24C512故障然后排坑记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/492339

相关文章

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

matlab读取NC文件(含group)

matlab读取NC文件(含group): NC文件数据结构: 代码: % 打开 NetCDF 文件filename = 'your_file.nc'; % 替换为你的文件名% 使用 netcdf.open 函数打开文件ncid = netcdf.open(filename, 'NC_NOWRITE');% 查看文件中的组% 假设我们想读取名为 "group1" 的组groupName

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

STM32内部闪存FLASH(内部ROM)、IAP

1 FLASH简介  1 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 2 通过在程序中编程(IAP)实现程序的自我更新 (OTA) 3在线编程(ICP把整个程序都更新掉) 1 系统的Bootloader写死了,只能用串口下载到指定的位置,启动方式也不方便需要配置BOOT引脚触发启动  4 IAP(自己写的Bootloader,实现程序升级) 1 比如蓝牙转串口,

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

寻迹模块TCRT5000的应用原理和功能实现(基于STM32)

目录 概述 1 认识TCRT5000 1.1 模块介绍 1.2 电气特性 2 系统应用 2.1 系统架构 2.2 STM32Cube创建工程 3 功能实现 3.1 代码实现 3.2 源代码文件 4 功能测试 4.1 检测黑线状态 4.2 未检测黑线状态 概述 本文主要介绍TCRT5000模块的使用原理,包括该模块的硬件实现方式,电路实现原理,还使用STM32类

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图

STM32 ADC+DMA导致写FLASH失败

最近用STM32G070系列的ADC+DMA采样时,遇到了一些小坑记录一下; 一、ADC+DMA采样时进入死循环; 解决方法:ADC-dma死循环问题_stm32 adc dma死机-CSDN博客 将ADC的DMA中断调整为最高,且增大ADCHAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, ADC_Buffer_Size); 的ADC_Bu