打印
[其它应用]

关于SH79f1611芯片的EEPROM读写和擦除的问题

[复制链接]
1309|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
QGQ2008|  楼主 | 2021-1-15 16:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
关于SH79f1611芯片的EEPROM读写和擦除

读取成功,扇区擦除和字节编程失败,不知什么原因。
程序如下

#include "Define.H"
#include "intrins.h"
#include "Eeprom.h"
#include "Absacc.H"
/*****************************************************************************************************
*  Function Name: u8 EEPromByteRead(UINT8 nAddrH,UINT8 nAddrL)  
*  Created By:    GQ.quan
*  Created Date:  2021.01.05
*  Input:         nAddrH, nAddrL
*  Output:        无
*  Return:        nTemp
*  Description:   从指定地址处读取1个字节返回
*  History:      
*  Others:                        
*****************************************************************************************************/
unsigned char EEPromByteRead(u8 nAddrH,u8 nAddrL)// 字节读
{unsigned char nTemp;
unsigned int nInt;
_push_(IEN0);//
IEN0 &= 0x7F ;//关闭总中断
FLASHCON = 0x01;//访问EEPROM
nInt = nAddrH ; //读取地址为[nAddrH,nAddrL]
nInt <<= 8 ;nInt += nAddrL ;
nTemp = CBYTE[nInt];//将CBYTE[nAddrH+nAddrL]内数据存入nTemp变量
FLASHCON = 0x00 ;//将操作区域切换回Main Block
_pop_(IEN0);//
return (nTemp);//将读取值作为函数返回值
}
// 一个扇区256个字节,共8个扇区(EEPROM = 8*256B,总共 2KB)
/*****************************************************************************************************
*  Function Name: void EEPromByteProgram(UINT8 nAddrH,UINT8 nAddrL, UINT8 nData)   
*  Input:         nAddrH, nAddrL,nData
*  Output:        无
*  Return:        无
*  Description:   向指定地址处写入1个字节
*  History:
*  Others:                        
*****************************************************************************************************/
void EEPromByteProgram(u8 nAddrH,u8 nAddrL, u8 nData)  // 字节编程
{
_push_(IEN0);//
IEN0 &= 0x7F;  
FLASHCON = 0x01;//访问EEPROM
XPAGE =(nAddrH);//个扇区256个字节,共8个扇区
IB_DATA = nData;
IB_OFFSET = nAddrL;
IB_CON1 = 0x6E;//开始编程操作
IB_CON2 = 0x05;
IB_CON3 = 0x0A;
IB_CON4 = 0x09;
IB_CON5 = 0x06;
_nop_() ;                                
_nop_() ;
_nop_() ;
_nop_() ;
XPAGE = 0 ;
FLASHCON = 0x00 ;//将编程区域切换回Main Block
_pop_(IEN0);//

}
/*****************************************************************************************************
*  Function Name: void EEPromSectorErase(UINT8 nAddrH)   
*  Input:         nAddrH
*  Output:        无
*  Return:        无
*  Description:          擦除指定扇区   
*  History:
*  Others:                        
*****************************************************************************************************/
void EEPromSectorErase(u8 nAddrH)//扇区擦除
{
_push_(IEN0);//
IEN0 &= 0x7F ;
FLASHCON = 0x01 ;                                                                                
XPAGE = (nAddrH);//个扇区256个字节,共8个扇区                                         
IB_CON1 = 0xE6 ;        
IB_CON2  = 0x05 ;
IB_CON3 = 0x0A ;
IB_CON4 = 0x09 ;
IB_CON5  = 0x06 ;
_nop_() ;                                
_nop_() ;
_nop_() ;
_nop_() ;
XPAGE = 0 ;
FLASHCON = 0X00 ;
_pop_(IEN0);//
}

使用特权

评论回复
沙发
嵌入小菜菜| | 2021-1-15 16:55 | 只看该作者
感谢楼主分享,这个EEPROM的还是很好用的。

使用特权

评论回复
板凳
Jobs的梨子| | 2021-1-15 23:30 | 只看该作者
报错信息是什么呢

使用特权

评论回复
地板
名字是啥样| | 2021-1-16 16:12 | 只看该作者
想问一下,错误的信息是什么?究竟是什么原因造成的?

使用特权

评论回复
5
Bruing| | 2021-1-17 20:20 | 只看该作者
指令对的情况下失败的原因大部分是延时问题

使用特权

评论回复
6
QGQ2008|  楼主 | 2021-1-18 09:47 | 只看该作者
本帖最后由 QGQ2008 于 2021-1-18 09:55 编辑

没有报错,程序能正常运行,就是不能写入数据和擦除指定扇区

使用特权

评论回复
7
QGQ2008|  楼主 | 2021-1-18 09:52 | 只看该作者
Bruing 发表于 2021-1-17 20:20
指令对的情况下失败的原因大部分是延时问题

嗯嗯,目前一直在找原因

使用特权

评论回复
8
QGQ2008|  楼主 | 2021-1-18 09:54 | 只看该作者
名字是啥样 发表于 2021-1-16 16:12
想问一下,错误的信息是什么?究竟是什么原因造成的?

没有报错,程序能正常运行,就是不能写入数据和擦除指定扇区,原因目前还没有找到

使用特权

评论回复
9
hfei| | 2022-3-6 12:44 | 只看该作者
代码好像没问题,检测一下实参是否正确

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

40

帖子

1

粉丝