標題: 弄了幾天,還是無法讀寫93C66 EEPROM存儲器,不知道問題出在哪里? [打印本頁]
作者: lmn2005 時間: 2021-10-1 12:58
標題: 弄了幾天,還是無法讀寫93C66 EEPROM存儲器,不知道問題出在哪里?
93C66為4K位串行 EEPROM存儲器,讀寫時序與24C有點區(qū)別。
93C66.jpg (37.76 KB, 下載次數(shù): 62)
下載附件
93C66引腳圖
2021-10-1 12:57 上傳
根據(jù)手冊,讀取數(shù)據(jù)時,CS置高,先向DI發(fā)起始位1(高電平),再發(fā)送操作碼10,然后再發(fā)9位地址碼,這樣就可以讀取數(shù)據(jù)了。但無論如何修改程序,讀出的數(shù)據(jù)要么不是0XFF,就是0XF0或0XF8。時序圖和源碼見后,請各位大師指點。
20211001 無法讀取93C66數(shù)據(jù).jpg (94.91 KB, 下載次數(shù): 73)
下載附件
讀取數(shù)據(jù)時序圖
2021-10-1 12:58 上傳
單片機源程序如下:
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)//讀取數(shù)據(jù) 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)//寫入數(shù)據(jù) 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);
}
作者: 冰火風輪 時間: 2021-10-1 23:16
ORG 懸空或接VCC 是16位模式哦,接地沒?
作者: lmn2005 時間: 2021-10-2 11:29
有的,按地,設置為8位。
作者: lmn2005 時間: 2021-11-9 15:42
如果讀寫是采用雙字節(jié)地址(第一個字節(jié)為輔地址,第二個字節(jié)為空字節(jié)),可以正常讀寫93C66,但要讀寫0xff以上的地址就沒有辦法了。ORG確定是接地的。真是百思不得其解。
作者: 188610329 時間: 2021-11-9 17:10
也關(guān)注了你幾天,93C這片子沒玩過,提不了什么建議。
看你一直沒解決,就說說以下3點:
1,你說時序與24C有點區(qū)別,這個不是有點區(qū)別,是完全不同…… 24C是 I2C接口規(guī)范,93C是SPI接口規(guī)范,完全就是兩種協(xié)議……
2,大多SPI接口的Flash 片子, DO都是需要10K 上拉到 Flash自身的VCC的然后,單片機用開漏,或者高阻模式讀取DO的數(shù)據(jù),而DI和SK,也是最好10K上拉到Flash自身的VCC 然后,單片機開漏模式控制。如果你程序上找不到原因,可以試試電路。
3,SPI由于前沿,后沿的問題,比較復雜,你最好仔細對照手冊,發(fā)數(shù)據(jù)和收數(shù)據(jù),依賴的時鐘沿是否一致。
作者: lmn2005 時間: 2021-11-9 18:01
1、沒錯,24C與93C系列的讀寫原理完全不同。2、DO有接上拉電阻10K。各IO口有嘗試輸出高低電平,均為正常值(高電平接近VCC,低電平為0) 。
3、上述發(fā)的程序思路按93C手冊上的時序編寫的,不過手冊上某些地方比較費解,估計是翻譯版本。
-
-
93C66.pdf
2021-11-9 18:01 上傳
點擊文件名下載附件
288.23 KB, 下載次數(shù): 23
作者: 188610329 時間: 2021-11-9 18:25
從手冊的圖2a看, 當你發(fā)完地址最后一個位:A0后, DO 會有一個低電平確認,你對這個有判斷么?
作者: lmn2005 時間: 2021-11-10 08:47
這個意義不大,如果地址碼按手冊說的發(fā)送9位的話,在A1位的時候DO就發(fā)生低電平應答;如果發(fā)送的是8位地址碼,才是在A0發(fā)生應答。寫入的檢測的意義相對較大,但讀取數(shù)據(jù)的檢測意義不大,因為現(xiàn)在發(fā)送的是雙字節(jié)16位地址碼,遠比9位多得多,等到發(fā)送完地址碼,這個低電平早過去了。
如果地址碼只發(fā)送8位或9位,就永遠都無法讀取到正確的數(shù)據(jù)。
作者: lmn2005 時間: 2021-11-10 08:56
補充,使用雙字節(jié)地址碼,我是參考了本論壇的一個帖子,鏈接http://m.raoushi.com/bbs/dpj-98782-1.html,這個帖子介紹的是93C56(2K),我手頭的是93C66(4K)。如果不修改原程序,也是無法正確讀寫。昨天嘗試使用雙字節(jié)16位地址碼(第2個字節(jié)為空字節(jié),什么內(nèi)容都可以,可以0x00,也可以0xFF,我都試過),這樣就能正確讀寫0-255地址的數(shù)據(jù)。
作者: 188610329 時間: 2021-11-10 21:46
問: 93C46 和 93C66 手冊一致么?
作者: lmn2005 時間: 2021-11-11 15:02
問題終于徹底解決了!原因就是這款93C66只能使用16位模式,而不能使用8位模式,所以存儲空間是256*16。
-
93C66LN引腳(只能使用16位模式).jpg
(4.99 KB, 下載次數(shù): 116)
下載附件
2021-11-11 15:02 上傳
93C66引腳圖
-
93C66LN實物(只能使用16位模式).jpg
(759.44 KB, 下載次數(shù): 113)
下載附件
2021-11-11 15:02 上傳
93C66實物圖
作者: 188610329 時間: 2021-11-11 16:17
……,你居然口口聲聲,信誓旦旦說“org”接地了?
作者: lmn2005 時間: 2021-11-11 17:48
有呀!有接地!就是這個芯片本來就是16位的,所以不支持8位。
作者: 188610329 時間: 2021-11-11 18:27
93c66ln是沒有org的……,何來org接地只說?沒有org的是不能讀8位的……
作者: lmn2005 時間: 2021-11-12 09:21
我根本不知道93c66ln是沒有org的,以為是93C系列的,引腳是一致的,結(jié)果走了不少彎路。直到昨天下載到的NM93C66數(shù)據(jù)手冊,才知道93C系列有的有org,有的沒有。93C系列的芯片平時極少用到,不熟悉,只是剛好手頭有,才拿來玩玩。
作者: bigbigcong 時間: 2021-11-12 09:26
這個flash跟AT24C類相比有啥好處?便宜嗎?
作者: lmn2005 時間: 2021-11-12 09:56
本帖最后由 新新科技 于 2021-11-12 12:07 編輯
估計是以前在什么板子上拆出來的,手頭只有3P。價格不知道,但只知道比24C要多一個或兩個IO口來驅(qū)動,并且驅(qū)動方式比24C難搞,一點好處都沒有。我的用AT89S52(很久以前購買的)制作的倒計時器 PCB設計有兩個存儲芯片位,一個是24C的,一個是93C的。這93C66現(xiàn)在就拿出來用用,用完了就用24C。還是24C用得比較熟悉。現(xiàn)在用STC等的單片機了,24C又不需要了。
作者: 188610329 時間: 2021-11-12 12:49
通常說的 93C66 是指: AT93C66B (MicroChip的產(chǎn)品) 這款是有 ORG的。可以8位,16位切換
NM93C66LN (是National的產(chǎn)品) 是沒有ORG的,只有16位。
作者: 188610329 時間: 2021-11-12 13:08
為了琢磨樓主的問題,特意去買了幾片做實驗。
原本也不想吐槽,你既然問了我就說一下,
如果不是你剛好有這個片子(朋友送的,公司倒閉剩下的),就不要用這個片子。設計這東西的完全沒有站在用于角度考慮過。
首先4線制,通信協(xié)議幾乎就是SPI協(xié)議。撇開ORG控制腳,你需要4個IO才能操作。說法是2M的速率,實際上,我用89C52都必須加 NOP 才能穩(wěn)定通信,當然,比AT24C還是快一點。但是重點來的…… 他的指令不是標準位制 即不是8位,也不是16位,24位, 而是根據(jù)型號不同 長度不同,比如93C66, 16位數(shù)據(jù)存儲格式的話,指令是11位,8位數(shù)據(jù)存儲格式,指令是12位, 93C46的話, 16位數(shù)據(jù)存儲格式的話,指令是9位,8位數(shù)據(jù)存儲格式,指令是10位,由于這奇葩的設定, 你沒有辦法用常見的通用的硬件SPI去驅(qū)動。大多數(shù)單片機只能用IO模擬SPI方式去驅(qū)動。
這就是所有缺點了么? 不是!!!!上面這些都不是重點, 真正的重點是:
這個芯片,一次只能讀/寫 1個字節(jié),或者一個字(雙字節(jié)),然后必須停止,重新啟動,再發(fā)送指令,操作另一個 字/字節(jié)。 你說一個上K 的Eeprom 讀寫模式如此之不友好?
24C雖然是 I2C操作, 表面上速度比不過 這個93C, 但是,人家有連讀連寫啊,實際對比測試,連寫16個字節(jié),24C 完勝 93C。
所以,93C這個東西,這次是第一次買(本意也不是要用),深入使用了解之后,這次也是最后一次買(有人非要送給我的話,還是來者不拒的)。
以上是個人對93C 和 24C 比較后的直觀結(jié)論,不做客觀依據(jù),不喜誤噴。
| 歡迎光臨 (http://m.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |