打印

无法写入数据,但是可以读出数据

[复制链接]
830|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
houcs|  楼主 | 2020-11-4 20:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
pic18F27Q10,在操作flash的eeprom时候,无法写入数据,但是可以读出数据,同时也无法擦除。

使用特权

评论回复
沙发
lium| | 2020-11-4 20:28 | 只看该作者
代码例程核对下

使用特权

评论回复
板凳
houcs|  楼主 | 2020-11-4 20:33 | 只看该作者
核对过,看不出什么问题

使用特权

评论回复
地板
gongche| | 2020-11-4 20:40 | 只看该作者
eerate读过了吗

使用特权

评论回复
5
houcs|  楼主 | 2020-11-4 20:51 | 只看该作者
读过了,已经把err位的问题解决了

使用特权

评论回复
6
guoyt| | 2020-11-4 21:00 | 只看该作者

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
7
houcs|  楼主 | 2020-11-4 21:04 | 只看该作者
下面是写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;
、、*************************************************************************************************************

使用特权

评论回复
8
lium| | 2020-11-4 21:09 | 只看该作者
用MCC生成多好,不用自己一点点写了。

使用特权

评论回复
9
renyaq| | 2020-11-4 21:15 | 只看该作者

下面是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;
}

使用特权

评论回复
10
houcs|  楼主 | 2020-11-4 21:18 | 只看该作者
如果你用硬件调试工具,写了EE之后,IDE里面EE窗口数据是不会变化的。需要停下来,读一下芯片,才能刷新到IDE的窗口

使用特权

评论回复
11
hanwe| | 2020-11-4 21:20 | 只看该作者
自己写,会漏掉一些内容。除非对寄存器和手册非常非常了解。

使用特权

评论回复
12
houcs|  楼主 | 2020-11-4 21:25 | 只看该作者
我写入之后,我用读eeprom去读取内容,希望的数值没有写入,通过校对

使用特权

评论回复
13
houcs|  楼主 | 2020-11-4 21:32 | 只看该作者
我担心系统bug会更难差,我用数据手册对照写的。刚刚对比了MMC生成代码,没有什么差别

使用特权

评论回复
14
houcs|  楼主 | 2020-11-4 21:35 | 只看该作者
谢谢您的答复,我去试试看

使用特权

评论回复
15
wangpe| | 2020-11-4 21:39 | 只看该作者
建议直接打印出来看。

使用特权

评论回复
16
houcs|  楼主 | 2020-11-4 21:43 | 只看该作者

好的,我明天去单位试一下,多谢各位大侠了哈        

使用特权

评论回复
17
CoolSilicon| | 2020-11-5 10:15 | 只看该作者
检查一下你的解锁序列.....
datasheet对此有明确的时许要求, 自认为写的对,不一定符合datasheet的要求的.
或者简单用MCC生成的好了.

使用特权

评论回复
18
橘子阿小| | 2021-8-5 16:54 | 只看该作者
您好,您解决这个问题了吗?方便把读取数据的代码发一下嘛?

使用特权

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

本版积分规则

743

主题

8382

帖子

5

粉丝