AT24Cxx 读写问题 写出现不明白的问题

我用的是AT24C512来存储数据,但写地址的时候,写完16位的地址,然后再写一个8位数据;
在读出来的时候,读到的是高8位地址所指向的地址的数据,且数据等于地址的低8位,怎么也读不到16位地址所指向地址的数据。
//向指定地址写一个字节数据
Write_IIC(0x00,0x00,0x10); //向0x0000地址写数据0x10
Delay(5);
Write_IIC(0x01,0x01,0x11); //向0x0101地址写数据0x11
Delay(5);
Write_IIC(0x02,0x02,0x12); //向0x0202地址写数据0x12
Delay(5);
Write_IIC(0x03,0x03,0x13); //向0x0303地址写数据0x13
Delay(5);
Write_IIC(0x04,0x04,0x14); //向0x0404地址写数据0x14
Delay(5);
//读指定地址的数据
Send_Data(Read_ICC(0x00,0x00)); //读0x0000地址的数据
Delay(1);
Send_Data(Read_ICC(0x01,0x01)); //读0x0101地址的数据

Delay(1);
Send_Data(Read_ICC(0x02,0x02)); //读0x0202地址的数据
Delay(1);
Send_Data(Read_ICC(0x03,0x03)); //读0x0303地址的数据
Delay(1);
Send_Data(Read_ICC(0x04,0x04)); //读0x0404地址的数据
Delay(1);

我是从串口接收数据,读出来的数据为:
01 02 03 04 14
证明只有最后一次写,才把0x14写到0x0404里面;或者最后一次是往地址0x04写了一次0x04,然后再写0x14,0x14把0x04覆盖了。
第一次往0x0000写0x10不成功,第二次把地址的低8位0x01写到高8位地址0x01里去了,第三次,第四次与第二次一样。
为什么会这样

uchar Read_ICC(uchar ADD_H,uchar ADD_L)
{
uchar dat;
I2C_Start();
Send_Byte(0xa0); //发器件地址,并通知准备发送地址
Response(); //应答
Send_Byte(ADD_H); //发器件内部存储器地址高位
Response(); //应答
Send_Byte(ADD_L); //发器件内部存储器地址低位
Response(); //应答
I2C_Start();
Send_Byte(0xa1); //发器件地址,并通知准备读取数据
Response(); //应答
dat=Rcv_Byte(); //读取数据
I2C_Stop(); //停止I2C总线
return (dat);

}

void Write_ICC(uchar ADD_H,uchar ADD_L,uchar dat)
{
I2C_Start();
Send_Byte(0xa0); //发器件地址,并通知准备发送地址,要对应芯片地址
Response(); //应答
Send_Byte(ADD_H); //发器件内部存储器地址高位
Response(); //应答
Send_Byte(ADD_L); //发器件内部存储器地址低位
Response(); //应答
Send_Byte(dat); //写入数据
Response(); //应答
I2C_Stop(); //停止I2C总线
}

3个回答

AT24C512是8位的存储器, 它的16位地址并不是常规16位存储器的地址.
你注意看其规格书的第3页: Memory Organization的描述. 它的16位地址包含2个部分,高9位是页地址, 低7位是页内偏址. 共512页,每页存储128字节.

图片说明

在以单个字节写的时候,地址是两个8位数。还有就是我在程序里,写的地址跟读的地址是一样的,应该说就是页地址一样,页内地址也一样,那为什么数据就变以了。
这个程序之前用没问题,就在这次使用就出来这个问题了,说明:硬件一样,器件是同一批货,代码也是之前的代码,没修改过。太奇怪了,找了好久没找到原因。

问题解决了,换了新的AT24C512芯片就好了。应该是器件放置时间长了,就出问题了。
刚开始测试出问题的是放置了两年的器件,现在拿来用,就不能用16位地址进行读写,只能用8位
新的就没问题

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
AT24CXX系列程序

存储空间分配 AT24C02A,2K 串行 EEPROM:共 32 页,每页 8 字节,寻址字需 8 位。 AT24C04A,4K 串行 EEPROM:共 32 页,每页 16 字节,寻址字需 9 位。 AT24C08A,8K 串行 EEPROM:共 64 页,每页 16 字节,寻址字需 10 位。 AT24C16A,16K 串行 EEPROM:共 128 页,每页 16 字节,寻址字需

AT24Cxx芯片读写--IIC总线

型号               容量               器件寻址字节(8位)       一次装载字节数  AT24C01        128×8        1010A2A1A0 R/W                 8 AT24C02       256×8         1010A2A1A0 R/W                 8  AT24C04      

AT24CXX(器件) 和 IIC总线(从畅学网复制的)

6、AT24CXX(器件) 和 IIC总线 本讲解不涉及详细IIC通信,重点在于AT24C系列器件的介绍 和 IIC的通信流程,不喜勿喷, 望请修正。。。。。GO 图AT24C01/02/04/08/16的外形级封装和引脚说明 AT24C系列为美国ATMEL公司推出的串行COMS型E2PROM,是典型的串行通信E2PROM 。 AT24CXX是IIC总线串行器件,具有工

STM32单片机(13) I2C读写AT24Cxx存储器实验

本程序主要利用I2C串行总线,实现AT24Cxx系列EEPROM存储器(此处是AT24C02)的读写,将数据写入,再读出发送至串口 可利用EEPROM存储器数据断电不消失性质存储一些配置数据等。

代码来解决多进程/线程同时读写一个文件的问题。

大家都知道,PHP是没有多线程概念的,尽管如此我们仍然可以用“不完美”的方法来模拟多线程。简单的说,就是队列处理。通过对文件进行加锁和解锁,来实现。当一个文件被一个用户操作时,该文件是被锁定的,其他用户只能等待,确实不够完美,但是也可以满足一些要求不高的应用。 function T_put($filename,$string){ //追加方式打开 $fp

《构建之法》第十六章 IT行业的创新

创新的迷思 最近几年,我们整个社会似乎对创新很感兴趣,媒体上充斥了创新型的人才、创新型的学校、创新型的公司、创新型的城市、创新型的社会,等等名词。有些城市还把“创新”当作城市的精神之一,还有城市要批量生产上千名顶级创新人才。IT行业也充斥了很多创新的新闻和掌故。这一章我们好好讲一讲IT行业的创新。对于创新,有一些似是而非的观点和传说(Myth,迷思) 迷思之一:灵光一闪现,伟大的创新就紧跟

基于stm32f103对AT24C256读写

基于stm32f103,IO模拟IIC总线实现对AT24C256读写操作,对不同系列的AT24CXX适用,只需稍微修改既可以使用。

EEPROM读写问题

最近用Mega16做一个步进电机的项目,以后把项目全部的内容贴上来跟大家分享呵呵,现在讨论一个防止EEPROM读写出错的小办法,我编写熔丝位是用AVRstudio里面的Jtag下载功能来烧熔丝位的,连上Jtag,AVRstudio的Jtag功能fuse选项里,把熔丝位中的Preserve EEPROM memory through the Chip Erase cycle钩上,Brown-out

VS2017,解决MFC无法插入类的simple文件

解决出现缺少默认js文件所带来的问题。。。。。。。。。。。。。。。。。。。。。。。不明白私信我

多线程并发问题,定义支持单个写线程和多个读线程的锁

 多线程并发是一个非常难搞的一个问题,不知道多少英雄白头,也没达到最好方法,以前我也是申名 static object o_lock=new object;在线程中采用lock(o_lock) ,这是简单的,后来有了ReaderWriterLock,这个类,改变了一点情况量小时还能容易采用,大规模管理仍然困难,如今看到了ReaderWriterLockSlim这个,感觉有希望改变困境了, 

(转帖)HashMap的读写并发 脏读 脏数据

HashMap的读写并发(http://chinaxxren.iteye.com/blog/794915) 博客分类:  J2SE JavaJ#thread  核心提示:大家都知道HashMap不是线程安全的,但是大家的理解可能都不是十分准确。很显然读写同一个key会导致不一致大家都能理解,但是如果读写一个不变的对象会有问题么?看看下面的代码就明白了。 1 import

读写优先问题

关于读写问题的读优先代码如下:Mutex WR =1; Mutex CountMutex =1; int count=0; //首先编写write的大概框架; void write(){ //由于读写以及写写之间需要互斥,所以使用WR隔离; //保证了写与写以及读与写之间的互斥; P(WR); write operation; V(WR); } // read的大概

AT24C32读取数据一直为0xFF

AT24C02程序可读可写,并且读写的数据都正确。采用AT24C32时,先写入数据,再读出数据一直为0xFF。 修改u8 AT24CXX_ReadOneByte(u16 ReadAddr)和void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite),将程序改为 if(EE_TYPE>AT24C16) { IIC_Send_Byte(0XA

redis应该中如何解决多写的竞争问题

最近项目中需要使用到redis进行数据缓存及读写操作。遇到了一些问题并总结到这里。 考虑到redis没有像db中的sql语句,update val = val + 10 where ...,无法使用这种方式进行对数据的更新。 假如有某个key = "price",  value值为10,现在想把value值进行+10操作。正常逻辑下,就是先把数据key为price的值读回来,加上10,

Java 多线程并发解决方案

Java 多线程并发编程会有许多不同的问题,主要有如下问题的应用: 多线程读写共享数据同步问题并发读数据,保持各个线程读取到的数据一致性的问题。 解决方案: synchronized关键字和Lock并发锁:主要解决多线程共享数据同步问题。 ThreadLocal主要解决多线程中数据因并发产生不一致问题。 ThreadLocal与synchroni

STM32外设驱动篇——AT24C02(I2C接口)

SOC:STM32F103RCT6 软件平台:STM官方库V3.5.0 开发工具:Keil 1. 摘要   本文章将给出STM32F103RCT6控制AT24C02的代码。如有疑问和错误,欢迎留言告之。 2.硬件连接 AT24C02使用I2C进行数据访问,板子上使用STM32的I2C控制器和AT24C02进行连接。 具体来说,PB10作为SCL和AT24C02相连

单片机编译时出现的问题

单片机编译时出现的问题 单片机编译时出现的问题 单片机编译时出现的问题 单片机编译时出现的问题 单片机编译时出现的问题 单片机编译时出现的问题 单片机编译时出现的问题 单片机编译时出现的问题 单片机编译时出现的问题 单片机编译时出现的问题 单片机编译时出现的问题 单片机编译时出现的问题 单片机编译时出现的问题 单片机编译时出现的问题 单片机编译时出现的问题

nand flash读写出现好多错误

在u-boot下输入命令: nand read 0x800000 0 0x800 结果出来好多信息 查了一些信息,是没有nand flash标志位 标志位用来表示nand flash是大页还是小页 CFG_NAND_OR_PRELIM 的宏添加 OR_FCM_PGS 即可

HashMap多线程操作下的问题总结

HashMap多线程操作下的问题总结 HashMap多线程操作会造成一系列问题,这很多人都知道。但反过来根据现象查问题,可能就不那么明显了。因此这里对多线程下HashMap使用会造成的问题做个小总结,以供大家“根据现象反查问题”作参考。

AT24Cxx中文数据手册【中为电子科技工作室】

AT24Cxx是Atmel公司出品的IIC接口EEPROM,这种芯片具有掉电数据不丢失特性,得到了大量应用,本文档译自Atmel官方文档,值得大家参考。

解决多线程同时读写一个文件的问题

<br />if (flock($file,LOCK_EX)){fwrite($file,'write more words');flock($file,LOCK_UN);}else{echo 'write wrong';}fclose($file);flock(file, 必需,规定要锁定或释放的已打开的文件lock, 必需。规定要使用哪种锁定类型。block 可选。若设置为 1 或 true,则当进行锁定时阻挡其他进程。)lockLOCK_SH 要取得共享锁定(读取的程序)LOCK_EX 要取得独占锁定

java多线程之线程并发库读写锁技术的妙用

读写锁,分为读锁和写锁,多个读锁不互斥,读锁和写锁互斥,写锁与写锁互斥,这是JVM自己控制的,你只要上好相应的锁即可,如果你的代码只读数据,可以很多人同时读,但不能同时写,那就上读锁;如果你的代码修改数据,只能有一个人在写,且不能同时读取,那就上写锁.总之,读的时候上读锁,写的时候上写锁! 看如下程序: 新建6个线程,3个线程用来读,3个线程用来写, package javaplay.th

sqlite3 解决并发读写冲突的问题

1 #include "stdafx.h" 2 #include "sqlite3.h" 3 #include 4 #include 5 6 //sqllite 相关变量 7 sqlite3 *sql_db; 8 char *sql_ErrMsg; 9 int sql_rc; 10 sqlite3_stmt *sql_statement; 11 12

leetcode刷题记录(买卖股票的最佳时机系列问题)

开始逐步拾起C++,故以后的刷题,全用python和C++两种语言实现。 一、买卖股票的最佳时机 I 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。 注意你不能在买入股票前卖出股票。 示例 1: 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价...

Linux多线程实践(6) --Posix读写锁解决读者写者问题

Posix读写锁int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock, const pthread_rwlockattr_t *restrict attr); int pthread_rwlock_destroy(pthread_rwlock_t *rwlock); int pthrea

Redis技术之旅十 高并发问题

Redis技术之旅十 高并发问题redis为什么会有高并发问题 redis的出身决定 redis是一种单线程机制的nosql数据库,基于key-value,数据可持久化落盘。由于单线程所以redis本身并没有锁的概念,多个客户端连接并不存在竞争关系,但是利用jedis等客户端对redis进行并发访问时会出现问题。发生连接超时、数据转换错误、阻塞、客户端关闭连接等问题,这些问题均是由于客户端连接混

vb 窗体,画窗体问题

vb 窗体,画窗体问题,搞不明白

多线程同时读写文件

无聊,写了一个多线程同时读写文件,当然同一时刻只有一个线程读或者写文件import java.io.File; import java.util.Random; public class Test { public static void main(String[]

操作系统中的读写者经典问题

第一类读者-写者问题:读者优先 除非有写者在写文件,否则没有一个读者需要等待。 分析思想:   读者到: 1)无读者、写者,新读者可以读 2)有写者等,但有其它读者正在读,则新读者也可以读 3)有写者写,新读者等 写者到: 1)无读者,新写者可以写 2)有读者,新写者等待 3)有其它写者,新写者等待   信息量: readcount = 0 ——记录当前正在读的

SD卡修复工具

低格,修复无法读写,格式化问题,低格,修复无法读写,格式化问题,低格,修复无法读写,格式化问题,

多线程访问HashMap容易犯的错误

多线程对HashMap的访问有一个容易犯的错误描述如下:HashMap做为一个成员变量通过接口被多个线程获取访问,在一个线程中更新修改,如果读线程和写线程访问的是同一个成员变量,而且线程间没有同步,就会导致数据异常甚至程序崩溃。即使通过线程同步保证对hashmap的读写是串行,也不是很好的方法,一是要使用全局的锁保证线程间的互斥,开销比较大,二是全局锁会造成读或写线程的阻塞等待,体验也不是很好。所以

操作系统PV操作及读者写者问题

1、信号量: 2、P、V操作原语可描述为以下式子: 3、解释: 4、互斥模式原理: 5、同步模式原理: 6、读者写者问题:

读写锁解决读者与写者问题

读写锁是用来解决读者写者问题的,读操作可以共享,写操作是排他的,读可以有多个在读,写只有唯一个在写,同时写的时候不允许读。 在编写多线程的时候,有一种情况是比较常见的。那就是,有些公共数据修改的机会比较少。相较改写,它们读的机会反而多的多。 读者写者模式:三种关系,两类人,一个场所 三种关系:     读者与读者:无关系     写者与写者:互斥

多线程读写问题循环buffer

实现多线程读写缓冲区的小例子。一个任务读文件并写入缓冲区,一个任务从缓冲区读内容写到文件,缓冲区可循环。读大文件请稍微改下缓冲区大小。

HTML/JSP/Servlet中的路径问题

我建了一个项目web项目day18_listener_filter,下面有目录/html/registerImprove.html 在Servlet和JSP中如果写“/”则代表当前应用的目录下即day18_listener_filter。---HTML中代表的路径就是localhost后面的路径, 如果不写“/”则代表相对路径。----当前页面的路径(如果你目前的在day18_li

关于利用verilog 编写ssram的读写时序时遇到的问题

此次使用的 ssram为

Mysql的事务和事务的隔离级别,读写引发的安全问题以及解决方案

1.事务的特性: ACID 原子性,一致性,隔离性,持久性 ·隔离性-->一个事务执行的过程中,不应该受到其他的事务的干扰 2.如果不考虑隔离性,就会引发一些 读 的问题 ·脏读 --> 一个事务读到另一个事务未提交的数据 ·不可重复读 --> 一个事务读到了另一个事务已经提交的update数据,导致多次查询结果不一致 ·虚读(幻读) --> 一个事务读到了另一个事务已经提交的inser

sqlite多进程并发读写模式下,返回SQLITE_BUSY错误的处理方法

SQLite作为一款小型的嵌入式数据库,本身没有提供复杂的锁定机制,无法内部管理多路并发下的数据操作同步问题,更谈不上优化,所以涉及到多路并发的情况,需要外部进行读写锁控制,否则SQLite会返回SQLITE_BUSY错误,以驳回相关请求,这是由于使用当前连接访问数据时,要申请相应级别的锁,而各个级别的锁有些是互斥的,当申请不到锁时就会返回这个错误。这时只要稍等片刻,等其它连接的操作处理完,释放了

信号量解决读写者问题

读者—写者问题(Readers-Writers problem)也是一个经典的并发程序设计问题,是经常出现的一种同步问题。计算机系统中的数据(文件、记录)常被多个进程共享,但其中某些进程可能只要求读数据(称为读者Reader);另一些进程则要求修改数据(称为写者Writer)。就共享数据而言,Reader和Writer是两组并发进程共享一组数据区,要求: (1)允许多个读者同时执行读操作

安装后出现的问题1

安装后出现的问题1安装后出现的问题1安装后出现的问题1安装后出现的问题1安装后出现的问题1安装后出现的问题1安装后出现的问题1

各种java和数据库问题

里面写很多java和数据库出现的问题。

【操作系统总结】读写者问题

读写者问题一个数据文件可被多个进程共享,不允许一个写进程和其他的读进程或者写进程同时访问这个资源,因为会引起混乱利用记录型信号量解决问题semaphore rmutex = 1, wmutex = 1;//读和写的互斥信号量 int readcount = 0;//读的进程为0void reader() { do { wait(rmutex);//拿到读的锁,已经读进程在执行

php中,高并发状态下文件的读写 (解决多线程同时读写一个文件的问题)

php中,高并发状态下文件的读写 Filed under: php/javascript — 标签:php, 并发, 文件 — 机器人 @ 4:08 下午 对于日IP不高或者说并发数不是很大的应用,一般不用考虑这些!!用一般的文件操作方法完全没有问题。但如果并发高,在我们对文件进行读写操作时,很有可能多个进程对进一文件进行操作,如果这时不对文件的访问进行相应的独占,就容易造成数据丢

了解些常见的面试题

A公司写出java中synchronized的使用方式。Java中设置最大堆和最小堆内存的参数是什么?volatile的作用?一道设计题多个线程同时读写,读线程的数量远远⼤于写线程,你认为应该如何解决 并发的问题?你会选择加什么样的锁?JAVA的AQS是否了解,它是⼲嘛的?除了synchronized关键字之外,你是怎么来保障线程安全的?什么时候需要加volatile关键字?它能保证线程安全吗?C...

Android 中SQLite进行读写时,涉及的并发处理问题

相信做Android开发牵扯到SQLite数据库的时候,我们都知道数据库的CRUD都是不支持多线程操作的。当我们要使用多线程的时候,基本上就是为每个线程分配一个SQLiteOpenHelper对象来进行操作,但这样就会产生很大的性能问题,消耗更多的内存空间。 在这种情况下,我们一般就会只使用一个SQLiteOpenHelper对象来操作,如果我们要使用多线程,这时就需要注意SQLiteDataB

并发带来的问题——三种常见的读数据异常现象

如果说数据不在ACID特性的保护下会发生不一致的现象,那么:     在ACID的保护下,是不是数据就一定不会产生不一致的现象呢?     在关系数据库系统中,多个会话(session)可以访问同一个数据库的同一个表的同一行数据。这样,对于数据而言,就意味着在同一个时间段内,有多个会话可以对其施加操作(或读操作或写操作),读写操作施加的顺序不同以及事务中A特性对事务结果的影响(或成功或失败,即

数据库与缓存双写不一致问题分析与解决方案设计

一、说明根据 Cloud Design Patterns 一书中关于缓存模式的 Cache Aside Pattern 说明,其主要内容总结如下:读取的时候,先读取缓存,如果缓存中没有,就直接从数据库中读取,然后取出数据后放入缓存更新的时候,先删除缓存,再更新数据库二、数据库与缓存读写模式策略写完数据库后是否需要立即更新缓存还是直接删除缓存?(1)、如果写数据库的内容与更新到缓存中的内容是一样的,...

EEPROM常见的读写问题和防止办法

在项目开发中经常使用到EEPROM,现在把自己开发中曾经遇到的陷阱和自己的解决方法列出。(1)现象:加密型遥控器的ID自动丢失和改变。         原因:在更新EEPROM过程中,断开电源。         解决方法:        a.更改设计避免在写入EEPROM过程中断开电源;        b.增加100uF的电容,断电后瞬间维持EEPROM供电正常至EEPROM写入完成。

Hbase热点写问题

1.热点写问题表现在大量的写请求集中在一个region上,造成单点压力大,降低写效率. 2.解决方法.创建表的指定多个region,默认情况下一个表一个region,刚开始写的时候就会造成所有的写请求都写到一个region上面,创建多个region的话,写请求就会分流到多个region上面去。提高写的效率 3.第二个方法,对rowkey进行散列,既然我们要把多个请求写分到不同的region上,我

解决三门问题python代码

比较好的三门问题的演示!如果您想不明白三门问题可以参考此程序。

相关热词 c#框体中的退出函数 c# 按钮透明背景 c# idl 混编出错 c#在位置0处没有任何行 c# 循环给数组插入数据 c# 多线程死锁的例子 c# 钉钉读取员工排班 c# label 不显示 c#裁剪影像 c#工作进程更新ui
立即提问