打印
[PIC®/AVR®/dsPIC®产品]

pic18F27Q10的EEPROM 擦,写问题

[复制链接]
957|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
rpk74A|  楼主 | 2019-7-15 21:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
pic18F27Q10,在操作flash的eeprom时候,无法写入数据,但是可以读出数据,同时也无法擦除。
我把代码例程核对过,看不出什么问题,请各位大师指点一二,看看问题出在哪里,eerate也读过了,已经把err位的问题解决了
             下面是写eeprom的代码。已经加了注释,帮忙看下问题大概出在什么地方,多谢
//*************************************************************************************************************************************
     GIE=0;                   // 关闭中断
     temp_reg=0x7A;             // 准备写入数据0x7A  
    NVMADRU=0x31;           // 最高位地址 0x31
    NVMADRH=0x00;          // 高位地址   0x00
    NVMADRL=0x00;          // 地位地址   0x00  // 0x310000为18F27Q10 date eeprom地址
    NVMDATL=temp_reg;      //数据写入寄存器
    NVMCON0bits.NVMEN=1;   // NVM 控制器使能
    NVMCON2=0x55;          // 解锁序列 0x55 0xAA
    NOP();
    NVMCON2=0xAA;
    NOP();
    NVMCON1bits.WR=1;     // WR置1  操作eeprom时候使用wr 位
    NOP();
    NOP();
    while(NVMCON1bits.WR==1);
     NVMCON0bits.NVMEN=0;
     GIE=1;
、、*************************************************************************************************************

使用特权

评论回复
沙发
北极风| | 2019-7-16 08:23 | 只看该作者
用MCC生成多好,不用自己一点点写了。

下面是MCC生成的代码。

void DATAEE_WriteByte(uint16_t bAdd, uint8_t bData)
{
    uint8_t GIEBitValue = INTCONbits.GIE;
   
    //Set NVMADR with the target word address: 0x310000 - 0x3103FF
    NVMADRU = 0x31;
    NVMADRH = (uint8_t)((bAdd & 0xFF00) >> 8);
    NVMADRL = (uint8_t)(bAdd & 0x00FF);

    //Load NVMDATL with desired byte
    NVMDATL = (uint8_t)(bData & 0xFF);
   
    //Enable NVM access
    NVMCON0bits.NVMEN = 1;
   
    //Disable interrupts
    INTCONbits.GIE = 0;

    //Perform the unlock sequence
    NVMCON2 = 0x55;
    NVMCON2 = 0xAA;

    //Start DATAEE write and wait for the operation to complete
    NVMCON1bits.WR = 1;
    while (NVMCON1bits.WR);

    //Restore all the interrupts
    INTCONbits.GIE = GIEBitValue;

    //Disable NVM access
    NVMCON0bits.NVMEN = 0;
}

使用特权

评论回复
板凳
cdyyabc| | 2019-7-16 15:11 | 只看该作者
如果你用硬件调试工具,写了EE之后,IDE里面EE窗口数据是不会变化的。需要停下来,读一下芯片,才能刷新到IDE的窗口

使用特权

评论回复
地板
yiyigirl2014| | 2019-7-16 15:29 | 只看该作者
自己写,会漏掉一些内容。除非对寄存器和手册非常非常了解。

使用特权

评论回复
5
rpk74A|  楼主 | 2019-7-16 19:47 | 只看该作者
cdyyabc 发表于 2019-7-16 15:11
如果你用硬件调试工具,写了EE之后,IDE里面EE窗口数据是不会变化的。需要停下来,读一下芯片,才能刷新到I ...

我写入之后,我用读eeprom去读取内容,希望的数值没有写入,通过校对

使用特权

评论回复
6
rpk74A|  楼主 | 2019-7-16 19:48 | 只看该作者
yiyigirl2014 发表于 2019-7-16 15:29
自己写,会漏掉一些内容。除非对寄存器和手册非常非常了解。

我担心系统bug会更难差,我用数据手册对照写的。刚刚对比了MMC生成代码,没有什么差别

使用特权

评论回复
7
rpk74A|  楼主 | 2019-7-16 19:49 | 只看该作者
北极风 发表于 2019-7-16 08:23
用MCC生成多好,不用自己一点点写了。

下面是MCC生成的代码。

谢谢您的答复,我去试试看

使用特权

评论回复
8
zhuotuzi| | 2019-7-19 00:46 | 只看该作者
建议直接打印出来看。

使用特权

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

本版积分规则

1

主题

4

帖子

1

粉丝