历史上的今天
今天是:2025年02月20日(星期四)
2021年02月20日 | STM8唯一ID号加密方法
2021-02-20 来源:eefocus
1.读出ID号
#if defined(STM8S103)
#define ID_BaseAddress (0x4865)
#else// defined(STM8S105)
#define ID_BaseAddress (0x48CD)
#endif
void GetUniqueID(unsigned char *p)
{
unsigned char i;
unsigned char *pIDStart=(unsigned char *)(ID_BaseAddress);
for(i=0;i!=12;i++){*p++=*pIDStart++;}
}
2.把读出的ID号生成其他数据。不一定就是12字节的!并保存在内部EEPROM。在这个模块准备2个函数.一个用于加密.一个用于解密
void StmWriteUniqueID(unsigned char Addr)
{
unsigned char i;
FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);
while (FLASH_GetFlagStatus(FLASH_FLAG_DUL) == RESET)FLASH_Unlock(FLASH_MEMTYPE_DATA);
unsigned char *pEE=(unsigned char *)(FLASH_DATA_START_PHYSICAL_ADDRESS+(u32)Addr);
unsigned char *pIDStart=(unsigned char *)(ID_BaseAddress);
for(i=0;i!=6;i++)//由12字节生成12*N个字节
{
*pEE++=第1种算法,商业原因.我的算法就不公开了.大家可以准备一个数组查表
while(FLASH_GetFlagStatus(FLASH_FLAG_EOP)== RESET);
*pEE++=第2种算法,商业原因.我的算法就不公开了。大家可以准备一个数组查表
while(FLASH_GetFlagStatus(FLASH_FLAG_EOP)== RESET);
。。。。
第N种算法
}
}
//解密函数
unsigned char StmCheckUniqueID(unsigned char Addr)
3.主函数里面设置一个时间最好设置长一点。半个钟或其他,让人家难跟踪
while(1)
{
其他任务...............
/////////////////////////////////////////////////////////////////////////
if((Flag&FLAG_CHECK_ID)==FLAG_CHECK_ID)
{
Flag&=~FLAG_CHECK_ID;
if(StmCheckUniqueID(UniqueIDAddress)==1){IsIDCorrect=0x01;}//正确写入
else{IsIDCorrect=0x00;}//错误写入
}
/////////////////////////////////////////////////////////////////////////
其他任务...............
}
史海拾趣
|
我需要一个放大电路,它的要求是把我现有的一个0.6V的开关,放大成3.0V的开关,最后是要控制发光二极管亮灭,可以提供12.0V电源,哪位高人可以帮忙设计或有成品电路可以用请提供一下信息啊?… 查看全部问答> |
|
我现在键盘上面有个PRG按键..长按进入C参数 界面,,但是我觉得时间还不够长,,哪个帮我看下程序应该修改什么地方??把时间搞长点,,现在只要0.5秒就进入C的样子,,我想搞到2S,,不明白的尽管问… 查看全部问答> |
|
我是一个嵌入式linux开发的新手,现在想自学驱动开发,但是我一直有个疑问,请您指教: 我到底先读《linux设备驱动程序(第三版)》和宋老师编著的《linux设备驱动开发详解》哪一本书?我很苦恼。。。… 查看全部问答> |
|
c8051f 单片机(c2 ,jtag)和at89s5x单片机(isp)二合一串口编程下载线,支持3伏(c8051f 单片机),5伏(at89s5x单片机)电源, 目前通过实际验证可编程下载的芯片:c8051f310、c8051f320、c8051f330D、c8051f340、c8051f350、c8051f360、c8051f4 ...… 查看全部问答> |




