Qflash_Write(0x01000010,(uint8_t*)&guc_change_remote_status,sizeof(guc_change_remote_status));
0x01000010,在昕源芯片flash中的存储地址范围中随意取的
(uint8_t*)&guc_change_remote_status将 guc_change_remote_status 的地址转换为 uint8_t 类型的指针
void read_flash_change_remote_status(void)
{
uint8_t read_buffer[sizeof(uint8_t)];
uint32_t read_address = 0x01000010; //
Qflash_Read(read_address, read_buffer, sizeof(uint8_t));
uint8_t value = *((uint8_t*)read_buffer);
read_buffer是用于存储读取结果的缓冲区
|
|
|
uint8_t value = ((uint8_t)read_buffer);将读取到的值转换为 uint8_t 类型
uint32_t Qflash_Write(uint32_t address, uint8_t* p_data, uint32_t len)
{
ReturnMsg error;
GLOBAL_INT_DISABLE();
if(gst_Qflash_init_status != 0x55)
{
Qflash_Init();
//Qflash_Lock(FLASH_LOCK_F_256K);
Qflash_Lock(FLASH_LOCK_UNLOCK);
}
address -= 0x01000000;
assert_param(CMD_FLASH_WRITE != NULL);
error = CMD_FLASH_WRITE(address, p_data, len);
#ifdef USE_FULL_ASSERT
assert_param(error == FlashOperationSuccess);
#else
if(error != FlashOperationSuccess)
{
IS_LOG_DEBUG("F_E02=%d,\r\n",error);
}
#endif
GLOBAL_INT_RESTORE();
return error;
}
Qflash_Lock(FLASH_LOCK_UNLOCK);
写和读和擦除函数都在开始默认开锁。不用手动开。
typedef enum{
FlashOperationSuccess,
FlashWriteRegFailed,
FlashTimeOut,
FlashIsBusy,
FlashQuadNotEnable,
FlashAddressInvalid,
}ReturnMsg;
FlashAddressInvalid,这调试次里出现了地址错误,这个0x010E0000,0x010EA000都不可以写进去
用这个地址0x01000010才可以写进去。