主题中讨论的其他器件: CC1310
你好。
我们的平台采用 CC1312R 器件并使用 FlashProgram()函数运行内部闪存写入代码。
(代码包含 simplelink_cc13x2_26x2_SDK_4_40_04_04 SDK、不含 RTOS)。
根据 FlashProgram()的简短说明,建议在执行写操作之前禁用行缓冲区和高速缓存。
可以使用 VIMSLineBufDisable()/VIMSLineBufEnable()函数禁用/启用线路缓冲器。
我们尝试寻找一个 TI 的示例、该示例类似于我们在代码中所做的工作、我们认为我们找到了一个示例:
ti\simplelink_cc13x2_26x2_sdk_4_40_04_04\examples\notos\CC1312R1_LAUNCHXL_bim\bim_offchip
该示例显示了函数 writeFlashPg()的用法,该函数又调用 FlashProgram()。
尽管如此,行缓冲区禁用/启用似乎在 writeFlashPg()调用之前或 writeFlashPg()本身中都不使用。
如果我在该示例中缺少允许省略线路缓冲器启用/禁用的内容、请发送电子邮件给我。
如果代码中确实缺少行缓冲区禁用/启用-为什么这样? 是否有任何情况 可以避免在写入内部闪存时启用/禁用线路缓冲器?
我将摘录以下代码
非常感谢
/Gil。
/*********
*@fn checkImagesExtFlash
*
*@简要检查外部闪存上存储的映像。 如果找到有效的映像
*要复制,它会复制映像,如果映像是可执行的,则会跳转
*以执行。
三、会议的报告
/*********
.
/*将映像复制到内部闪存*/
uint8_t RetVal = BIM_copyImage (eFlStrAddr、imgFxdHdr.len、startAddr);
/*更新元数据标题中的副本状态*/
extFlashWrite (EXT_FLASH_ADDRESS (flashPageNum、IMG_COPY_STAT_OFFSET)、1、(uint8_t *)&STATUS);
/*如果图像复制成功*/
if (RetVal ==成功)
{
/*更新图像复制状态并计算
复制的 CRC
并更新它的 CRC 状态。 CRC_STAT_OFFSET
*
uint32_t CRC32 = CRC32_calc (flash_page (startAddr)、intFlashPageSize、0、imgFxdHdr.len、false);
if (CRC32 =imgFxdHdr.CRC32)//如果 CRC 匹配,则在复制的映像中更新其状态
{
STATUS = CRC_VALID;
/*元数据中的更新状态*/
extFlashWrite (flash_address (flashPageNum、CRC_STAT_OFFSET)、
sizeof (status)、&status);
/*内部闪存中的更新状态*/
writeFlashPg (flash_page (startAddr)、crc_STAT_OFFSET、
STATUS、sizeof (status))(&S);
#if (定义的(安全))
/*检查内部闪存映像上的符号验证*/
securityStatus = Bim_authentateImage (startAddr、metadataHdr.fixedHdr.len、false);
其他
securityStatus =成功;
#endif /*#if defined (security)*/
三、会议的结果
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~μ A
/*********
*@fn writeFlash
*
*@简要将数据写入闪存。
*
*@param page -要在闪存中写入的页
*@param offset -闪存页中开始写入的偏移量
*@param pBuf -指向要写入的数据缓冲区的指针
*@param len -要以字节为单位写入的数据长度
*
*@返回无。
*
uint8_t writeFlashPg (uint8_t page、uint32_t offset、uint8_t * pBuf、uint16_t len)
{
uint8_t 高速缓冲状态;
uint32_t flashStat = flash_Success;
cachesState = disableCache ();
flashStat = FlashProgram (pBuf、(uint32_t) flash_address (page、offset)、len);
enableCache (高速缓存状态);
返回((flashStat = fapi_status_Success)? Flash_Success:flash_failure);
}