(BLE) CC2640R2 SPI驱动(基于TI Drivers) 注意点

本文介绍了一种将内部Flash数据备份到外部Flash的方法。针对内部Flash起始地址为0的问题,提出了解决方案:先将数据复制到RAM缓冲区,然后发送到驱动层,并提醒不要使用memcpy函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系统升级功能需要 把内部flash数据发送到外部flash做备份等操作。 注意,内部flash起始地址为0,和NULL是一样的,

因此在使用驱动接口的时候,对于第一个page的flash,会当作NULL处理, 这就引发bug,SPI驱动会认为TX-BUF为NULL而使用默认的0x00作为填充数据!

所以对于这个特别的page,先拷贝到ram再发送到驱动层, 且注意,不要使用memcpy,因为也会进行NULL判断。

按照如下方式(代码来自upgrade.c)

    //then copy the first page
    
    /******************************************************
      Caution!!!!
      The fisrt flash page start addr is 0 !!!
      That is the same as NULL!!!!
      so copy to ram buffer first!!!
      DO NOT use memcpy!!
    ******************************************************/
    do{
      uint8_t buff[4];
      
      pSrc = (const uint8_t*)INTFLASH_BLE_APP_ADDR;
      dstAddr=extFlashAddr;
      
      ((uint32_t*)buff)[0]=((uint32_t*)pSrc)[0];
      
      if(copy_page_to_sflash(buff,dstAddr,4)!=0)
        return -1;
      
      return copy_page_to_sflash(pSrc+4,dstAddr+4,256-4);
      
    }while(0);

而在BIM中,由于是按一个一个字节发送数据的,因此此问题不会出现! 但依旧需要注意NULL问题,不要使用 memcpy等函数。

转载于:https://my.oschina.net/u/2435819/blog/1822272

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值