[8/16位单片机] 请教一下写用户ID的指令

[复制链接]
176|10
| 2019-8-13 08:47 | 显示全部楼层
看看手册上有没有说

使用特权

评论回复
| 2019-8-13 08:49 | 显示全部楼层
  1. static void eraseUserID(uint32_t addr)
  2. {
  3.     uint8_t GIEBitValue = INTCONbits.GIE;     // Save interrupt enable

  4.     TBLPTRU = (uint8_t) ((addr >> 16) & 0xff);
  5.     TBLPTRH = (uint8_t) ((addr >> 8) & 0xff);
  6.     TBLPTRL = (uint8_t) (addr & 0xff);   
  7.    
  8.     EECON1bits.FREE = 1;
  9.    
  10.     EECON1bits.EEPGD = 1;
  11.     EECON1bits.CFGS = 0;
  12.     EECON1bits.WREN = 1;
  13.    
  14.     INTCONbits.GIE = 0; // Disable interrupts
  15.     EECON2 = 0x55;
  16.     EECON2 = 0xAA;
  17.     EECON1bits.WR = 1;  // Erase like the wind!
  18.     INTCONbits.GIE = GIEBitValue;   // Restore interrupt enable
  19.     EECON1bits.WREN = 0;    // Disable writes to memory   
  20. }

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


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

  30.     TABLAT = (flashWrBufPtr[0] >> 4);
  31.     asm("TBLWT*+");
  32.     TABLAT = (flashWrBufPtr[0] & 0x0f);
  33.     asm("TBLWT*+");
  34.     TABLAT = (flashWrBufPtr[1] >> 4);
  35.     asm("TBLWT*+");
  36.     TABLAT = (flashWrBufPtr[1] & 0x0f);
  37.     asm("TBLWT*+");
  38.     TABLAT = (flashWrBufPtr[2] >> 4);
  39.     asm("TBLWT*+");
  40.     TABLAT = (flashWrBufPtr[2] & 0x0f);
  41.     asm("TBLWT*");
  42.    
  43.     TBLPTRU = (uint8_t) 0x20;
  44.     TBLPTRH = (uint8_t) 0;
  45.     TBLPTRL = (uint8_t) 0;  
  46.    
  47.     EECON1bits.EEPGD = 1;
  48.     EECON1bits.CFGS = 0;
  49.     EECON1bits.WREN = 1;
  50.    
  51.     INTCONbits.GIE = 0; // Disable interrupts
  52.     EECON2 = 0x55;
  53.     EECON2 = 0xAA;
  54.     EECON1bits.WR = 1;  // Write like the wind!
  55.     INTCONbits.GIE = GIEBitValue;   // Restore interrupt enable
  56.     EECON1bits.WREN = 0;    // Disable writes to memory   
  57. }
复制代码

使用特权

评论回复

评论

meeagle 2019-8-15 00:55 回复TA
软件里是这样写,我想找烧录的语法,MPLAB里的 
| 2019-8-13 08:49 | 显示全部楼层
网上找的相关的代码,不知道是不是。

使用特权

评论回复
| 2019-8-13 09:34 | 显示全部楼层
用烧写器写
理论上也可以用写FLASH的函数来写,但是,在程序运行过程中写这个地方,有什么意义呢?

使用特权

评论回复
| 2019-8-13 13:49 | 显示全部楼层
你看datasheet上有相关userid的写入/读写说明的, 可以在代码中来操作..

使用特权

评论回复
 楼主 | 2019-8-15 00:53 | 显示全部楼层
是想烧录的时候烧进去,找到部分答案了,可以用IDOCS来定义,但是这只能写最后一位即000XH,前面三个数字不知道怎么写

使用特权

评论回复
| 2019-8-15 09:54 | 显示全部楼层
meeagle 发表于 2019-8-15 00:53
是想烧录的时候烧进去,找到部分答案了,可以用IDOCS来定义,但是这只能写最后一位即000XH,前面三个数字不 ...

你看IPE的user guide, 里面有关于这部分的说明的, 烧录的时候, 可以实现自动+1之类的操作...

使用特权

评论回复
 楼主 | 2019-8-17 10:50 | 显示全部楼层
IPE是可以设置,看到了,谢谢。另外有一个问题,DEVICEID为什么不让改,改HEX烧了也一样没变,这样别人开盖不是很容易就破解了吗?

使用特权

评论回复
 楼主 | 2019-8-17 17:26 | 显示全部楼层
有没有方法可以擦写DEVICE ID的?或者破坏也行

使用特权

评论回复
扫描二维码,随时随地手机跟帖
*滑动验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表