返回该小组首页 回复主题
mpuhome

mpuhome

小组等级:     E币:441  (E币换礼)

#1楼主:Jennic 教你如何给自己的代码上锁

文章发表于:2008-05-14 10:38



Jennic 教你如何给自己的代码上锁
           
   我们知道,在使用ZigBee 协议栈的时候,我们需要使用带有ZigBee License 的模块(也就是协议栈公司需要收取版权费)。如果我们自己在802.15.4或JENET上开发的代码如何保护自己的协议栈的版权呢?当然有办法。 下面我一步一步教大家如何做这样的一个锁。
  
   需要的设备有:一个JENNIC 开发板(使用JENNIC最新的5139R1),一条可以连通PC和开发板的串口线。Jennic PC端编译环境(在http://www.jennic.com/jennic_support/software) 可以免费下载到。
   
   理论基础:Jennic 5139R1中,MAC地址8byte,固定在FLASH 地址: 0X30-0X37.
             ZB04 LIC 共16byte,在FLASH中的位置是:0x38-0x47.
             当我们使用ZB协议栈时,系统在启动时,会根据MAC地址和LIC算这个设备是否被授权。如果我们使用的是没有ZIGBEE LICENSE 的模块,协议栈就无法启动。
  
  那这里有一个问题,我们在烧写程序时,MAC地址和ZB LIC 不会被刷掉吗?是的。 烧写程序时,MAC地址,和LIC信息被保护了起来。

所以我们这里需要做的是两步动作:
(1)        通过某种方式,写入自己的LIC (写入地址为0X38-0X47)。Jennic 有提供一套BOOTLOADER 命令格式。用户可以在PROGRAMME模式下方便的去读写FLASH和RAM。参考文档JN-AN-1007-Boot-Loader-Serial-Protocol-1v6.pdf
(2)        在自己的程序中判断模块是否有合适的LICENSE,这个过程比较简单。
比如在FLASH 0X38-0X42中写入0X0,0X1,0X2,0X3,0X4,0X5,0X6,0X7,0X8,0X9,
在系统启动时做判断即可
if(VerifyMyKey() ==FALSE)
{
        vPrintf("Do not have license...\n\r");
        while(1);
}   
其中VerifyMyKey(void)的原型为:

PUBLIC bool_t VerifyMyKey(void)
{
    uint8 temp[10];
    bAHI_FlashInit(E_FL_CHIP_AUTO,NULL);
    bAHI_FullFlashRead(0x38,10,temp);
    if(strcmp((char *)temp,(char *)privatekey)==0)
    {
        return TRUE;
    }
    return FALSE;
}
  现在主要问题是如何在PROGRAM 模式下写入 LIC。
  根据JN-AN-1007-Boot-Loader-Serial-Protocol-1v6.pdf流程图:
(1)        读FLASH ID。串口发送 :02 25 27    返回:0x5 0x26 0x0 0xbf 0x49 0xd5(判断为SST 25VF010A)
(2)        写FLASH 类型。 发送:07 2C  01 00 00 00 00 2A 。返回:0x3 0x2d 0x0 0x2e
(3)        擦除FLASH。发送:02 07 05 。返回:0x3 0x8 0x0 0xb
(4)写入LIC:
1E 09 30 00 00  00 00 15 8D 00 00 01 24 01 00 01  02 03 04 05 06  07 08 09 FF FF FF FF FF FF XX
返回:0x3 0xa 0x0 0x9
到此,我们大致描叙的整个过程。更详细的请参考JENNIC文档。
有疑问请email 到:belie.song@jennic.com
            
      Belie Song
      2008-4-17

      【回复】

快速回复主题--如果想加入编辑器功能,建议使用 [高级回复]

您目前还不是小组成员,请先加入

回复贴子区

用户名:    您没有注册?

密码:    忘记了密码?

内容:

浏览该小组的用户还看过...

设计资源与分销

";