找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3280|回复: 18
打印 上一主题 下一主题
收起左侧

弄了几天,还是无法读写93C66 EEPROM存储器,不知道问题出在哪里?

[复制链接]
跳转到指定楼层
楼主
93C664K位串行 EEPROM存储器,读写时序与24C有点区别。


根据手册,读取数据时,CS置高,先向DI发起始位1(高电平),再发送操作码10,然后再发9位地址码,这样就可以读取数据了。但无论如何修改程序,读出的数据要么不是0XFF,就是0XF00XF8。时序图和源码见后,请各位大师指点。



单片机源程序如下:
void wd93(uint dd,uchar num)//写入
{
   unsigned char i;
         dd=dd<<(16-num);
   for (i=0; i<num; i++)
    {
       if (dd & 0x8000) DI_93c66=1;
       else DI_93c66=0;        
                   SK_93c66=0;
                   delay_us(1);
                   SK_93c66=1;
                   delay_us(1);
                   dd=dd<<1;
                   SK_93c66=0;            
    }
}

void ewen93()//允许编程
{        
         CS_93c66=1;   
   wd93(0x0980,12);// 0000 1001  1xxxxxxx 允许写指令      
         CS_93c66=0;
}

void ewds93()//禁止编程
{        
         CS_93c66=1;
         wd93(0x0900,12);//0000 1001  0xxx xxxx 禁止写指令
         CS_93c66=0;
}        

unsigned char ReadEe(uint address)//读取数据 address:A8--A0
{
   unsigned char i, dat=0;   
   CS_93c66=1;
         delay_us(2);//           
         wd93(0x06,3);//   110
         wd93(address,9);//xxxxx xxxx

   for (i=0; i<8; i++)
    {
                   dat=dat<<1;                       
       SK_93c66=0;   
       delay_us(1);//                    
       SK_93c66=1;   
                   delay_us(1);//
                   if(DO_93c66) dat=dat|1;

    }
   CS_93c66=0;delay_us(2);//     
   return(dat);
}

void WriteEe(uint address,unsigned char dat)//写入数据 address:A8--A0
{
   CS_93c66=1;delay_us(10);//

    wd93(0x05,3);     //  101
         wd93(address,9);   //x xxxx xxxx  
         wd93(dat,8);       //data

         CS_93c66=0;delay_ms(4);
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:955673 发表于 2021-10-1 23:16 | 只看该作者
ORG 悬空或接VCC 是16位模式哦,接地没?
回复

使用道具 举报

板凳
ID:71233 发表于 2021-10-2 11:29 | 只看该作者
冰火风轮 发表于 2021-10-1 23:16
ORG 悬空或接VCC 是16位模式哦,接地没?

有的,按地,设置为8位。
回复

使用道具 举报

地板
ID:71233 发表于 2021-11-9 15:42 | 只看该作者
如果读写是采用双字节地址(第一个字节为辅地址,第二个字节为空字节),可以正常读写93C66,但要读写0xff以上的地址就没有办法了。ORG确定是接地的。真是百思不得其解。
回复

使用道具 举报

5#
ID:624769 发表于 2021-11-9 17:10 | 只看该作者
也关注了你几天,93C这片子没玩过,提不了什么建议。
看你一直没解决,就说说以下3点:
1,你说时序与24C有点区别,这个不是有点区别,是完全不同…… 24C是 I2C接口规范,93C是SPI接口规范,完全就是两种协议……
2,大多SPI接口的Flash 片子, DO都是需要10K 上拉到 Flash自身的VCC的然后,单片机用开漏,或者高阻模式读取DO的数据,而DI和SK,也是最好10K上拉到Flash自身的VCC 然后,单片机开漏模式控制。如果你程序上找不到原因,可以试试电路。
3,SPI由于前沿,后沿的问题,比较复杂,你最好仔细对照手册,发数据和收数据,依赖的时钟沿是否一致。
回复

使用道具 举报

6#
ID:71233 发表于 2021-11-9 18:01 | 只看该作者
188610329 发表于 2021-11-9 17:10
也关注了你几天,93C这片子没玩过,提不了什么建议。
看你一直没解决,就说说以下3点:
1,你说时序与24C ...

1、没错,24C与93C系列的读写原理完全不同。2、DO有接上拉电阻10K。各IO口有尝试输出高低电平,均为正常值(高电平接近VCC,低电平为0) 。
3、上述发的程序思路按93C手册上的时序编写的,不过手册上某些地方比较费解,估计是翻译版本。

93C66.pdf

288.23 KB, 下载次数: 23

回复

使用道具 举报

7#
ID:624769 发表于 2021-11-9 18:25 | 只看该作者
从手册的图2a看, 当你发完地址最后一个位:A0后, DO 会有一个低电平确认,你对这个有判断么?
回复

使用道具 举报

8#
ID:71233 发表于 2021-11-10 08:47 | 只看该作者
188610329 发表于 2021-11-9 18:25
从手册的图2a看, 当你发完地址最后一个位:A0后, DO 会有一个低电平确认,你对这个有判断么?

这个意义不大,如果地址码按手册说的发送9位的话,在A1位的时候DO就发生低电平应答;如果发送的是8位地址码,才是在A0发生应答。写入的检测的意义相对较大,但读取数据的检测意义不大,因为现在发送的是双字节16位地址码,远比9位多得多,等到发送完地址码,这个低电平早过去了。
如果地址码只发送8位或9位,就永远都无法读取到正确的数据。
回复

使用道具 举报

9#
ID:71233 发表于 2021-11-10 08:56 | 只看该作者
补充,使用双字节地址码,我是参考了本论坛的一个帖子,链接http://www.51hei.com/bbs/dpj-98782-1.html,这个帖子介绍的是93C56(2K),我手头的是93C66(4K)。如果不修改原程序,也是无法正确读写。昨天尝试使用双字节16位地址码(第2个字节为空字节,什么内容都可以,可以0x00,也可以0xFF,我都试过),这样就能正确读写0-255地址的数据。
回复

使用道具 举报

10#
ID:624769 发表于 2021-11-10 21:46 | 只看该作者
新新科技 发表于 2021-11-10 08:56
补充,使用双字节地址码,我是参考了本论坛的一个帖子,链接http://www.51hei.com/bbs/dpj-98782-1.html, ...

问: 93C46  和 93C66  手册一致么?
回复

使用道具 举报

11#
ID:71233 发表于 2021-11-11 15:02 | 只看该作者
问题终于彻底解决了!原因就是这款93C66只能使用16位模式,而不能使用8位模式,所以存储空间是256*16。

93C66LN引脚(只能使用16位模式).jpg (4.99 KB, 下载次数: 81)

93C66引脚图

93C66引脚图

93C66LN实物(只能使用16位模式).jpg (759.44 KB, 下载次数: 83)

93C66实物图

93C66实物图
回复

使用道具 举报

12#
ID:624769 发表于 2021-11-11 16:17 来自手机 | 只看该作者
……,你居然口口声声,信誓旦旦说“org”接地了?
回复

使用道具 举报

13#
ID:71233 发表于 2021-11-11 17:48 | 只看该作者
188610329 发表于 2021-11-11 16:17
……,你居然口口声声,信誓旦旦说“org”接地了?

有呀!有接地!就是这个芯片本来就是16位的,所以不支持8位。
回复

使用道具 举报

14#
ID:624769 发表于 2021-11-11 18:27 来自手机 | 只看该作者
93c66ln是没有org的……,何来org接地只说?没有org的是不能读8位的……
回复

使用道具 举报

15#
ID:71233 发表于 2021-11-12 09:21 | 只看该作者

我根本不知道93c66ln是没有org的,以为是93C系列的,引脚是一致的,结果走了不少弯路。直到昨天下载到的NM93C66数据手册,才知道93C系列有的有org,有的没有。93C系列的芯片平时极少用到,不熟悉,只是刚好手头有,才拿来玩玩。
回复

使用道具 举报

16#
ID:958310 发表于 2021-11-12 09:26 | 只看该作者
这个flash跟AT24C类相比有啥好处?便宜吗?
回复

使用道具 举报

17#
ID:71233 发表于 2021-11-12 09:56 | 只看该作者
本帖最后由 新新科技 于 2021-11-12 12:07 编辑
bigbigcong 发表于 2021-11-12 09:26
这个flash跟AT24C类相比有啥好处?便宜吗?

估计是以前在什么板子上拆出来的,手头只有3P。价格不知道,但只知道比24C要多一个或两个IO口来驱动,并且驱动方式比24C难搞,一点好处都没有。我的用AT89S52(很久以前购买的)制作的倒计时器 PCB设计有两个存储芯片位,一个是24C的,一个是93C的。这93C66现在就拿出来用用,用完了就用24C。还是24C用得比较熟悉。现在用STC等的单片机了,24C又不需要了。
回复

使用道具 举报

18#
ID:624769 发表于 2021-11-12 12:49 | 只看该作者
新新科技 发表于 2021-11-12 09:21
我根本不知道93c66ln是没有org的,以为是93C系列的,引脚是一致的,结果走了不少弯路。直到昨天下载到的N ...

通常说的 93C66 是指: AT93C66B   (MicroChip的产品) 这款是有 ORG的。可以8位,16位切换

NM93C66LN (是National的产品) 是没有ORG的,只有16位。
回复

使用道具 举报

19#
ID:624769 发表于 2021-11-12 13:08 | 只看该作者
bigbigcong 发表于 2021-11-12 09:26
这个flash跟AT24C类相比有啥好处?便宜吗?

为了琢磨楼主的问题,特意去买了几片做实验。

原本也不想吐槽,你既然问了我就说一下,
如果不是你刚好有这个片子(朋友送的,公司倒闭剩下的),就不要用这个片子。设计这东西的完全没有站在用于角度考虑过。
首先4线制,通信协议几乎就是SPI协议。撇开ORG控制脚,你需要4个IO才能操作。说法是2M的速率,实际上,我用89C52都必须加 NOP 才能稳定通信,当然,比AT24C还是快一点。但是重点来的…… 他的指令不是标准位制 即不是8位,也不是16位,24位, 而是根据型号不同 长度不同,比如93C66, 16位数据存储格式的话,指令是11位,8位数据存储格式,指令是12位, 93C46的话, 16位数据存储格式的话,指令是9位,8位数据存储格式,指令是10位,由于这奇葩的设定, 你没有办法用常见的通用的硬件SPI去驱动。大多数单片机只能用IO模拟SPI方式去驱动。
这就是所有缺点了么? 不是!!!!上面这些都不是重点, 真正的重点是:
这个芯片,一次只能读/写 1个字节,或者一个字(双字节),然后必须停止,重新启动,再发送指令,操作另一个 字/字节。 你说一个上K 的Eeprom 读写模式如此之不友好?
24C虽然是 I2C操作, 表面上速度比不过 这个93C, 但是,人家有连读连写啊,实际对比测试,连写16个字节,24C 完胜 93C。
所以,93C这个东西,这次是第一次买(本意也不是要用),深入使用了解之后,这次也是最后一次买(有人非要送给我的话,还是来者不拒的)。

以上是个人对93C 和 24C 比较后的直观结论,不做客观依据,不喜误喷。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表