久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3656|回復: 11
打印 上一主題 下一主題
收起左側

STC8G2K64S4單片機IAP讀寫問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:588737 發表于 2021-7-2 17:13 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
最經剛用了一款STC的單片機STC8G2K64S4 ,數量200片,目前發現其中有兩片的EEPROM用IAP方式讀寫時會出問題。具體數據就是到數值超過127時,存入或者讀出的數據就變了,不知道大家有沒有遇到過
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:451718 發表于 2021-7-2 18:39 | 只看該作者
8G系列的IAP讀寫和  15系列的不一樣哦。 你的底層代碼是用的8G系列專用的么?
回復

使用道具 舉報

板凳
ID:948738 發表于 2021-7-3 21:08 | 只看該作者
那就是那兩片有問題唄...
回復

使用道具 舉報

地板
ID:588737 發表于 2021-7-5 08:20 | 只看該作者
robinsonlin 發表于 2021-7-2 18:39
8G系列的IAP讀寫和  15系列的不一樣哦。 你的底層代碼是用的8G系列專用的么?

是的。底層程序,就是8G的 。這個不是用8G專用的也不會有198片成功的事。
回復

使用道具 舉報

5#
ID:588737 發表于 2021-7-5 08:22 | 只看該作者
464645465465465 發表于 2021-7-3 21:08
那就是那兩片有問題唄...

我關心的問題就是,是不是那兩片一定有問題,或者說怎么通過程序來控制。我也問了我的同事,他說之前的12C5410AD就有這個問題,然后他把存入的數據控制在100以內,就行了。要是這樣的話。。
回復

使用道具 舉報

6#
ID:588737 發表于 2021-7-5 09:06 | 只看該作者
robinsonlin 發表于 2021-7-2 18:39
8G系列的IAP讀寫和  15系列的不一樣哦。 你的底層代碼是用的8G系列專用的么?

是的,不然那198片也都是不對的了。
回復

使用道具 舉報

7#
ID:401564 發表于 2021-7-5 17:04 | 只看該作者
代碼全部上傳看一下就知道怎么回事了
按照你這個寫入正確率,2/200,那就是1%沒有正常讀寫
這并不代表程序就是對的,特別是延時這一塊
因為,在絕大多數的情況下,單片機本身有問題的,是很少很少0.1%,都是多的,OTP單片機除外
帶EEPROM的單片機出廠之前,人家是進行過很多次讀寫測試的,我進過他們車間看過的
所以,上傳代碼看一下就知道了
回復

使用道具 舉報

8#
ID:856401 發表于 2021-7-5 19:55 來自手機 | 只看該作者
在寫入數據的時候斷電了
回復

使用道具 舉報

9#
ID:588737 發表于 2021-7-6 09:31 | 只看該作者
Y_G_G 發表于 2021-7-5 17:04
代碼全部上傳看一下就知道怎么回事了
按照你這個寫入正確率,2/200,那就是1%沒有正常讀寫
這并不代表程序 ...

void IapIdle()
{
                IAP_CONTR=0;                //關閉IAP功能
                IAP_CMD=0;                        //清除命令寄存器
                IAP_TRIG=0;                //清除觸發寄存器
                IAP_ADDRH=0X80;    //將地址設置到非IAP區域
                IAP_ADDRL=0;
}

char IapRead(int addr)                          //讀
{
                char dat;

                IAP_DATA=0x00;
                IAP_CONTR=0x80;                //使能IAP
                IAP_TPS = 12;                   //設置擦出等待參數 12MHz 以下               
                IAP_CMD=1;                        //設置IAP讀命令
                IAP_ADDRL=addr;                //設置IAP低地址
                IAP_ADDRH=addr>>8;        //設置IAP高地址
                IAP_TRIG=0x5a;               //寫觸發命令
                IAP_TRIG=0xa5;                //寫觸發命令
                _nop_();
                dat=IAP_DATA;                        //讀命令數據
                IapIdle();                        //關閉IAP功能

                return dat;

}

void IapProgram(int addr,char dat)           //寫
{
                IAP_CONTR=0x80;                //使能IAP
                IAP_TPS = 12;                   //設置擦出等待參數 12MHz 以下               
                IAP_CMD=2;                        //設置IAP寫命令
                IAP_ADDRL=addr;                //設置IAP低地址
                IAP_ADDRH=addr>>8;        //設置IAP高地址
                IAP_DATA=dat;                //寫IAP數據
                IAP_TRIG=0x5a;           //寫觸發命令
                IAP_TRIG=0xa5;                //寫觸發命令
                _nop_();
                IapIdle();                        //關閉IAP功能

}

void IapErase(int addr)                                 //擦除
{        
                IAP_CONTR=0x80;                //使能IAP
                IAP_TPS = 12;                   //設置擦出等待參數 12MHz 以下               
                IAP_CMD=3;                        //設置IAP擦除命令
                IAP_ADDRL=addr;                //設置IAP低地址
                IAP_ADDRH=addr>>8;        //設置IAP高地址
                IAP_TRIG=0x5a;           //寫觸發命令
                IAP_TRIG=0xa5;                //寫觸發命令
                _nop_();
                IapIdle();                        //關閉IAP功能
}
這部分是官方例程
void WriteDATA_FLASH_START_ADDRESS1()
{       
                IapErase(0x0000);
                IapProgram(0x0000,0);
                IapProgram(0x0002,128);
                delaynms(30);
               
                IapProgram(0x0010,sc/100);
                IapProgram(0x0012,sc%100);
                delaynms(30);
               
                IapProgram(0x0020,0);
                IapProgram(0x0022,127);
                delaynms(30);
}
這是我的寫入,數值我改了方便測試
void Read_dat1()
{   
                sw=IapRead(0x0000);
                sw=sw*100+IapRead(0x0002);
               
                sc=IapRead(0x0010);
                sc=sc*100+IapRead(0x0012);
               
                p =IapRead(0x0020);
                p=p*100+IapRead(0x0022);
}
這部分讀,然后再到顯示部分。這里就不放出來了。實際顯示SW讀出的值無限大,P就是正常的127
回復

使用道具 舉報

10#
ID:588737 發表于 2021-7-9 14:43 | 只看該作者
沒有大神了嗎 求幫助啊 指導啊
回復

使用道具 舉報

11#
ID:213173 發表于 2021-7-9 16:54 | 只看該作者
依然猶在 發表于 2021-7-9 14:43
沒有大神了嗎 求幫助啊 指導啊

如果別的芯片正常,就這兩個芯片經重復燒寫仍然是這個問題,有可能是芯片不良。否則通常是程序問題。雖然這款芯片沒有用過,但STC的其它型號用了上萬并且使用了EEPROM讀寫,沒有遇到類似問題。樓主仔細看看是不是數據類型使用不當或者中斷干擾了EEPROM讀寫。
回復

使用道具 舉報

12#
ID:81196 發表于 2021-7-9 17:41 | 只看該作者
是不是像EEPROM芯片一樣有讀寫buf限制
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产乱码久久久久久a丨 | 国产日韩欧美一区 | 欧美一区二区三区在线视频 | 一区二区三区国产精品 | 欧美午夜精品久久久久久浪潮 | 皇色视频在线 | 九九热热九九 | 国产精品久久 | 天天狠狠 | 日韩精品无码一区二区三区 | 国产在线小视频 | 97视频在线观看免费 | 久久综合av | 欧美日韩成人网 | 99r在线| 亚洲成人精选 | 欧美区在线观看 | 99精品99久久久久久宅男 | 久久久噜噜噜久久中文字幕色伊伊 | 成人毛片一区二区三区 | 尤物视频在线免费观看 | 手机日韩 | 欧美黑人狂野猛交老妇 | 欧美日韩在线观看视频 | 日韩成人久久 | 久久国| 成人妇女免费播放久久久 | 一区二区三区精品在线视频 | 国精产品一品二品国精在线观看 | 日韩精品在线观看一区二区三区 | 成人一区二区三区在线观看 | 欧美中文字幕一区二区三区亚洲 | 久久久久久国产精品免费免费 | a成人| 亚洲高清视频在线观看 | 免费黄色大片 | 久久av网| 日日操操| 成人午夜免费福利视频 | 中文字幕亚洲一区二区三区 | 国产精品欧美一区二区 |