Hi,TIs
在读写flash的时候遇到一些问题,我设定了固定地址在flash范围内,所以简化了flashwrite的逻辑,缺少了判断,但是我决定没什么影响。
我在读flash的时候没问题,写的时候,初始时flash内容为FF的时候可以写进去,但是改写数据的时候就不行了。代码如下:
static void FlashWrite(uint8_t *pWriteBuffer, uint32_t Address, uint32_t Count) { uint32_t pageStartAddr; /* Calculate the start address of the destination page */ pageStartAddr = (uint32_t)Address - ((uint32_t)Address % FLASH_PAGE_SIZE); /* Disable flash cache */ VIMSModeSet(VIMS_BASE, VIMS_MODE_DISABLED); while (VIMSModeGet(VIMS_BASE) != VIMS_MODE_DISABLED); /* Erase the whole page */ FlashSectorErase((uint32_t)pageStartAddr); /* Write back from the scratch buffer */ FlashProgram(pWriteBuffer, Address, Count); /* Re-enable flash cache */ VIMSModeSet(VIMS_BASE, VIMS_MODE_ENABLED); }
void store_CT_ID(uint8_t ct_id) { FlashWrite(&ct_id,CT_INFO_BASE+CT_ID_OFFSET,1); } void store_CT_RF_freq(uint32_t ct_freq) { uint8_t temp[4]={0}; uint8_t i; for(i =0;i<4;i++) { temp[i] = (uint8_t)((ct_freq>>(8*i)) & 0xFF); } FlashWrite(temp,CT_INFO_BASE+CT_RF_FREQ_OFFSET,4); }
/* Page size is 4KiB on the CC13xx/CC26xx */
#define FLASH_PAGE_SIZE 0x1000
#define CT_INFO_BASE 0x10000
#define CT_ID_OFFSET 0x1004
#define CT_RF_FREQ_OFFSET 0x2004
#define CT_RF_DBM_OFFSET 0x3004
flash地址以上。
麻烦TI帮忙看下flashwrite函数中有无问题,擦除的时候为什么没有擦除掉?