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

pic18F26k22 bootloader EEPROM 编程失败

[复制链接]
1003|6
手机看帖
扫描二维码
随时随地手机跟帖
dorry3|  楼主 | 2020-9-12 19:15 | 显示全部楼层 |阅读模式
bootloader 和项目程序都正常,就是EEPROM不能编程
EEPROM的OFFSET 已更改是多少?0x00不对,默认也不对。不知道什么问题。Flash烧录正常,程序运行正常。就是eeprom的数据不能写入。
QQ图片20200912191422.png
QQ图片20200912191428.png

使用特权

评论回复
天灵灵地灵灵| | 2020-9-13 13:31 | 显示全部楼层
用这些操作,在应用程序里能否对EEPROM操作

使用特权

评论回复
qiu4466| | 2020-9-13 19:38 | 显示全部楼层
发完整的数据包帮你看一下

使用特权

评论回复
lcczg| | 2020-9-14 10:24 | 显示全部楼层
跟踪调试一下。

使用特权

评论回复
michaelleng8888| | 2020-9-16 10:37 | 显示全部楼层
欢迎来咨询

使用特权

评论回复
dorry3|  楼主 | 2020-9-29 11:00 | 显示全部楼层
bellstudio 发表于 2020-9-19 10:49
https://ww1.microchip.com/downloads/en/DeviceDoc/40001779B.pdf
按照手册第三章,PIC18的EE应该编在0xF0 ...

谢谢 @bellstudio 的提示,回过来看了手册,又仔细检查程序发现为MCC产生的Bootloader 的代码的问题。
EEADR自动产生为为 EEADRL,实际没有此地址,当时就 改为uint8_t EEADRL,导致写入地址错误。
以下为更改正确的代码。

uint8_t  Write_EE_Data()
{
    EEADR = frame.address_L;
    EEADRH = frame.address_H;
        EECON1 = 0x04;  //   b'00000100';     // Setup for EEData
    for (uint8_t i = 0; i < frame.data_length; i++)
    {
        while (EECON1bits.WR == 1);  // wait until previous write complete
        EEADR = frame.address_L + i;
        if (EEADR == 0x00)
        {
            ++ EEADRH;
        }
        EEDATA = frame.data;
        StartWrite ();
    }
    frame.data[0] = COMMAND_SUCCESS;
    return 10;
}00';     // Setup for EEData

使用特权

评论回复
wfw69| | 2021-1-6 16:49 | 显示全部楼层
学习了,谢谢楼主分享!

使用特权

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

本版积分规则

3

主题

20

帖子

1

粉丝