This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于cc2530修改secondary mac失败问题

Other Parts Discussed in Thread: CC2530

TI工程师您好:

cc2530,版本2.5.1a,我想用HalFlashWrite来改写secondary MAC。发现通过IAR调试时可擦除127page和写secondary MAC成功,但下电上电后(也就是不用IAR调试)时,擦除127page和写secondary MAC均失败,FCTL显示为abort。

我的问题跟下面case一样。下面case中有提到写flash对供电要求高,请问在供电上具体有怎么样的要求,来指导我们硬件修改验证?或者说此问题与供电无关,软件需要怎样处理?

https://e2echina.ti.com/question_answer/wireless_connectivity/zigbee/f/104/t/53553

本地通过cc2530的uart1口打印信息如下。调试代码见附件

��main�е����Լ�д�ĵ��Ժ���zigbee_adp_changeMac_test

int main( void )
{
  // Turn off interrupts
  osal_int_disable( INTS_ALL );

  // Initialization for board related stuff such as LEDs
  HAL_BOARD_INIT();

  // Make sure supply voltage is high enough to run
  zmain_vdd_check();

  // Initialize board I/O
  InitBoard( OB_COLD );

  // Initialze HAL drivers
  HalDriverInit();

  zigbee_adp_changeMac_test();
  
  // Initialize NV System
  osal_nv_init( NULL );

  // Initialize the MAC
  ZMacInit();
  ��
  ��




void zigbee_adp_changeMac_test(void)
{
#if 1
  uint8 usrDefSecondaryMac[Z_EXTADDR_LEN] = {0};    
  uint8 locbitw[HAL_FLASH_LOCK_BITS] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
                                                                ,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
  uint8 locbit[HAL_FLASH_LOCK_BITS] = {0};
  uint8 testMac1[Z_EXTADDR_LEN] = {0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00};
  uint8 testMac2[Z_EXTADDR_LEN] = {0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77};  
  uint8 tmp[200]={0};
 

  osal_memset(locbit,0,HAL_FLASH_LOCK_BITS);
  HalFlashRead(HAL_FLASH_IEEE_PAGE, (HAL_FLASH_IEEE_OSET+HAL_FLASH_IEEE_SIZE), locbit, HAL_FLASH_LOCK_BITS);
  osal_memset(tmp,0,200);
  sprintf((char *)tmp, "\r\n[zmain,loc1:%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x FCTL:0x%x]\r\n"
                  ,locbit[0],locbit[1],locbit[2],locbit[3],locbit[4],locbit[5],locbit[6],locbit[7]
                  ,locbit[8],locbit[9],locbit[10],locbit[11],locbit[12],locbit[13],locbit[14],locbit[15],FCTL);
  HalUARTWrite(1, tmp, osal_strlen((char *)tmp));

  //����дloc
  HalFlashWrite(0xFFFC, locbitw, 4);

  osal_memset(locbit,0,HAL_FLASH_LOCK_BITS);
  HalFlashRead(HAL_FLASH_IEEE_PAGE, (HAL_FLASH_IEEE_OSET+HAL_FLASH_IEEE_SIZE), locbit, HAL_FLASH_LOCK_BITS);
  osal_memset(tmp,0,200);
  sprintf((char *)tmp, "\r\n[zmain,loc2:%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x FCTL:0x%x]\r\n"
                  ,locbit[0],locbit[1],locbit[2],locbit[3],locbit[4],locbit[5],locbit[6],locbit[7]
                  ,locbit[8],locbit[9],locbit[10],locbit[11],locbit[12],locbit[13],locbit[14],locbit[15],FCTL);
  HalUARTWrite(1, tmp, osal_strlen((char *)tmp));
  
  //��ȡSecondary MAC
  HalFlashRead(HAL_FLASH_IEEE_PAGE, HAL_FLASH_IEEE_OSET, usrDefSecondaryMac, Z_EXTADDR_LEN);

  osal_memset(tmp,0,200);
  sprintf((char *)tmp, "\r\n[test_01,FM:0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x,FCTL:0x%x]\r\n"
                       ,usrDefSecondaryMac[0],usrDefSecondaryMac[1],usrDefSecondaryMac[2],usrDefSecondaryMac[3]
                       ,usrDefSecondaryMac[4],usrDefSecondaryMac[5],usrDefSecondaryMac[6],usrDefSecondaryMac[7],FCTL);
  HalUARTWrite(1, tmp, osal_strlen((char *)tmp));  

  
  HalFlashErase(127);

  osal_memset(tmp,0,200);
  sprintf((char *)tmp, "\r\n[test_02,after erase FCTL:0x%x]\r\n",FCTL);
  HalUARTWrite(1, tmp, osal_strlen((char *)tmp));
  
  HalFlashWrite(0xFFFA, testMac1, 2);

  osal_memset(tmp,0,200);
  sprintf((char *)tmp, "\r\n[test_03,after write FCTL:0x%x]\r\n",FCTL);
  HalUARTWrite(1, tmp, osal_strlen((char *)tmp));

  //��ȡSecondary MAC
  HalFlashRead(HAL_FLASH_IEEE_PAGE, HAL_FLASH_IEEE_OSET, usrDefSecondaryMac, Z_EXTADDR_LEN);

  osal_memset(tmp,0,200);
  sprintf((char *)tmp, "\r\n[test_04,FM:0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x,FCTL:0x%x]\r\n"
                       ,usrDefSecondaryMac[0],usrDefSecondaryMac[1],usrDefSecondaryMac[2],usrDefSecondaryMac[3]
                       ,usrDefSecondaryMac[4],usrDefSecondaryMac[5],usrDefSecondaryMac[6],usrDefSecondaryMac[7],FCTL);
  HalUARTWrite(1, tmp, osal_strlen((char *)tmp));  
#endif

#if 1
    osal_memset(tmp,0,200);
    sprintf((char *)tmp, "\r\n[test_001,before erase FCTL:0x%x]\r\n",FCTL);
    HalUARTWrite(1, tmp, osal_strlen((char *)tmp));
    
    HalFlashErase(127);

    osal_memset(tmp,0,200);
    sprintf((char *)tmp, "\r\n[test_002,after erase FCTL:0x%x]\r\n",FCTL);
    HalUARTWrite(1, tmp, osal_strlen((char *)tmp));
    
    HalFlashWrite(0xFFFA, testMac2, 2);

    osal_memset(tmp,0,200);
    sprintf((char *)tmp, "\r\n[test_003,after write FCTL:0x%x]\r\n",FCTL);
    HalUARTWrite(1, tmp, osal_strlen((char *)tmp));

    //��ȡSecondary MAC
    HalFlashRead(HAL_FLASH_IEEE_PAGE, HAL_FLASH_IEEE_OSET, usrDefSecondaryMac, Z_EXTADDR_LEN);

    osal_memset(tmp,0,200);
    sprintf((char *)tmp, "\r\n[test_004,FM:0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x,FCTL:0x%x]\r\n"
                         ,usrDefSecondaryMac[0],usrDefSecondaryMac[1],usrDefSecondaryMac[2],usrDefSecondaryMac[3]
                         ,usrDefSecondaryMac[4],usrDefSecondaryMac[5],usrDefSecondaryMac[6],usrDefSecondaryMac[7],FCTL);
    HalUARTWrite(1, tmp, osal_strlen((char *)tmp));    
#endif
}

在IAR调试状态下:
[Uart1 init1010_01]
[zmain,loc1:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FCTL:0x8]
[zmain,loc2:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FCTL:0x8]
[test_01,FM:0x00 0x11 0x22 0x33 0x44 0x55 0x66 0x77,FCTL:0x8]
[test_02,after erase FCTL:0x8]
[test_03,after write FCTL:0x8]
[test_04,FM:0x77 0x66 0x55 0x44 0x33 0x22 0x11 0x00,FCTL:0x8]
[test_001,before erase FCTL:0x8]
[test_002,after erase FCTL:0x8]
[test_003,after write FCTL:0x8]
 
正常工作状态下:
[Uart1 init1010_01]
[zmain,loc1:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FCTL:0x8]
[zmain,loc2:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FCTL:0x28]
[test_01,FM:0x00 0x11 0x22 0x33 0x44 0x55 0x66 0x77,FCTL:0x28]
[test_02,after erase FCTL:0x28]
[test_03,after write FCTL:0x28]
[test_04,FM:0x00 0x11 0x22 0x33 0x44 0x55 0x66 0x77,FCTL:0x28]
[test_001,before erase FCTL:0x28]
[test_002,after erase FCTL:0x28]
[test_003,after write FCTL:0x28]
[Uart1 init1010_01]

  • Winkeys Lin 说:
    但下电上电后(也就是不用IAR调试)时,擦除127page和写secondary MAC均失败,FCTL显示为abort

    重新上电后secondary MAC address没有写成功?

  • HI Kevin:

    重新上电后secondary MAC address没有写成功。

    <1>只有第1次使用ICCDebugger,在IAR点“download and debug”这次能写成功。

    <2>后面虽插着CCDebugger,下电上电,写MAC不成功;

    <3>或不插CCDebugger,下电上电,写MAC也不成功。

    请问上面<1>和<2>的差异,是CCDebugger会对CC2530提供额外电吗?CC2530对输入电有什么要求吗?或其它。

    正常工作状态下:

    [Uart1 init1010_01]

    [zmain,loc1:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FCTL:0x8]

    [zmain,loc2:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FCTL:0x28]

    [test_01,FM:0x00 0x11 0x22 0x33 0x44 0x55 0x66 0x77,FCTL:0x28]

    [test_02,after erase FCTL:0x28]

    [test_03,after write FCTL:0x28]

    [test_04,FM:0x00 0x11 0x22 0x33 0x44 0x55 0x66 0x77,FCTL:0x28]   ----此处应为0x77 0x66 0x55 0x44 0x33 0x22 0x11 0x00

    [test_001,before erase FCTL:0x28]

    [test_002,after erase FCTL:0x28]

    [test_003,after write FCTL:0x28]

    [Uart1 init1010_01]

  • 可以用flash programmer 写,通过HalFlashWrite写看下这里:blog.csdn.net/.../95969779
  • Hi Kevin:
    <1>通过flash programmer写是没问题,我验证过。可这个不满足我们产品生产工艺流程。我们产品的MAC地址是在成品阶段申请打印再录入,成品阶段已装好机壳了,无法使用flash programmer工具。如提前在半成品阶段使用flash programmer工具录入,但这个阶段生成的条形码无法流转到成品阶段再贴在机壳上。所以我们希望的是通过软件代码的方式写入。
    <2>你推荐的网址,我之前已看过了。代码也是按此写的。

    请问现在写失败返回abort的原因是什么?或者需要我们提高输入电压之类的吗?
  • 正常供电就行了,按链接中的方法写应该不会出现问题。
    我看你在英文论坛发了帖子,看下那边的回复e2e.ti.com/.../953378