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

请教一下写用户ID的指令

[复制链接]
635|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liuzaiy|  楼主 | 2022-8-10 20:45 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 pzsh 于 2022-8-15 16:35 编辑

用户ID地址是8000h~8003h,PIC8位单片机,请问写用户ID的指令是什么?

使用特权

评论回复
沙发
xxrs| | 2022-8-10 20:47 | 只看该作者
看看手册上有没有说

使用特权

评论回复
板凳
spark周| | 2022-8-10 20:49 | 只看该作者
static void eraseUserID(uint32_t addr)
{
    uint8_t GIEBitValue = INTCONbits.GIE;     // Save interrupt enable

    TBLPTRU = (uint8_t) ((addr >> 16) & 0xff);
    TBLPTRH = (uint8_t) ((addr >> 8) & 0xff);
    TBLPTRL = (uint8_t) (addr & 0xff);   
   
    EECON1bits.FREE = 1;
   
    EECON1bits.EEPGD = 1;
    EECON1bits.CFGS = 0;
    EECON1bits.WREN = 1;
   
    INTCONbits.GIE = 0; // Disable interrupts
    EECON2 = 0x55;
    EECON2 = 0xAA;
    EECON1bits.WR = 1;  // Erase like the wind!
    INTCONbits.GIE = GIEBitValue;   // Restore interrupt enable
    EECON1bits.WREN = 0;    // Disable writes to memory   
}

static void writeUserID(uint8_t *flashWrBufPtr)
{
    int i;
    uint8_t GIEBitValue = INTCONbits.GIE;     // Save interrupt enable


    TBLPTRU = (uint8_t) 0x20;
    TBLPTRH = (uint8_t) 0;
    TBLPTRL = (uint8_t) 0;  
        
    // Write 3 bytes which uses 6 LOC cells (1 nibble each).

    TABLAT = (flashWrBufPtr[0] >> 4);
    asm("TBLWT*+");
    TABLAT = (flashWrBufPtr[0] & 0x0f);
    asm("TBLWT*+");
    TABLAT = (flashWrBufPtr[1] >> 4);
    asm("TBLWT*+");
    TABLAT = (flashWrBufPtr[1] & 0x0f);
    asm("TBLWT*+");
    TABLAT = (flashWrBufPtr[2] >> 4);
    asm("TBLWT*+");
    TABLAT = (flashWrBufPtr[2] & 0x0f);
    asm("TBLWT*");
   
    TBLPTRU = (uint8_t) 0x20;
    TBLPTRH = (uint8_t) 0;
    TBLPTRL = (uint8_t) 0;  
   
    EECON1bits.EEPGD = 1;
    EECON1bits.CFGS = 0;
    EECON1bits.WREN = 1;
   
    INTCONbits.GIE = 0; // Disable interrupts
    EECON2 = 0x55;
    EECON2 = 0xAA;
    EECON1bits.WR = 1;  // Write like the wind!
    INTCONbits.GIE = GIEBitValue;   // Restore interrupt enable
    EECON1bits.WREN = 0;    // Disable writes to memory   
}
更多操作

使用特权

评论回复
地板
jiajs| | 2022-8-10 20:53 | 只看该作者
用烧写器写
理论上也可以用写FLASH的函数来写

使用特权

评论回复
5
zhenykun| | 2022-8-10 20:55 | 只看该作者
但是,在程序运行过程中写这个地方,有什么意义呢?

使用特权

评论回复
6
heweibig| | 2022-8-10 20:56 | 只看该作者
你看datasheet上有相关userid的写入/读写说明的, 可以在代码中来操作..

使用特权

评论回复
7
liuzaiy|  楼主 | 2022-8-10 20:59 | 只看该作者
是想烧录的时候烧进去,找到部分答案了,可以用IDOCS来定义

使用特权

评论回复
8
liuzaiy|  楼主 | 2022-8-10 21:03 | 只看该作者
但是这只能写最后一位即000XH,前面三个数字不知道怎么写

使用特权

评论回复
9
chuxh| | 2022-8-10 21:05 | 只看该作者
你看IPE的user guide, 里面有关于这部分的说明的, 烧录的时候, 可以实现自动+1之类的操作...

使用特权

评论回复
10
liuzaiy|  楼主 | 2022-8-10 21:07 | 只看该作者
IPE是可以设置,看到了,谢谢。另外有一个问题,DEVICEID为什么不让改,改HEX烧了也一样没变,这样别人开盖不是很容易就**了吗?

使用特权

评论回复
11
chenjunt| | 2022-8-10 21:17 | 只看该作者
有没有方法可以擦写DEVICE ID的?

使用特权

评论回复
12
liuzaiy|  楼主 | 2022-8-10 21:19 | 只看该作者
或者破坏也行

使用特权

评论回复
13
renyaq| | 2022-8-10 21:20 | 只看该作者
数据手册上应该有啊

使用特权

评论回复
14
juventus9554| | 2022-8-10 21:22 | 只看该作者
我还没有接触过这么深

使用特权

评论回复
15
wyjie| | 2022-8-10 21:24 | 只看该作者
是用的at指令吗

使用特权

评论回复
16
spark周| | 2022-8-10 21:26 | 只看该作者

破坏的话还能恢复么

使用特权

评论回复
17
juventus9554| | 2022-8-10 21:30 | 只看该作者
设置完之后还能更改吗

使用特权

评论回复
18
liuzaiy|  楼主 | 2022-8-10 21:33 | 只看该作者
其实还是不大明白,我再琢磨琢磨吧,多谢了哈先

使用特权

评论回复
19
lcczg| | 2022-8-12 11:10 | 只看该作者
不能改的。不想别人读,LOCK住。



使用特权

评论回复
20
meeagle| | 2022-8-12 21:21 | 只看该作者
deviceid是真正用来加密的,你改它干嘛呢?能改就没有加密能力了。
另外,你写进去的USERID其实是没有意义的别人可以直接抄了你软件,除非你再用服务器来加一重验证

使用特权

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

本版积分规则

735

主题

7546

帖子

2

粉丝