如何读取每页的闪存?我无法按部门阅读。
我必须读取2个内存扇区(2 * 16kbytes)。
我在FreeRtos下,并且正在使用STM32F401RE。
我正在使用指针,我只需要读取存储器闪存的两个扇区。
uint32_t data_store0[4096] = {0};
uint32_t data_store1[4096] = {0};
uint32_t *words0 = (uint32_t *) BASE_ADDR_SECTOR_0;
uint32_t *words1 = (uint32_t *) BASE_ADDR_SECTOR_1;
unsigned int buffer_firmware[8192] = {0};
unsigned char firmware[32768] = {0};
int k, m, i, j = 0;
int count_time = 0;
for(int i=0; i<4096; i++)
{
data_store0[i] += words0[i];
buffer_firmware[i] = data_store0[i];
}
for(int j=0; j<4096; j++)
{
data_store1[j] += words1[j];
}
for(m = 0, k = 4096; k < 8192 && m < 4096; m++, k++)
{
buffer_firmware[k] = data_store1[m];
}
SHA256Input(&ctx, (const uint8_t *) buffer_firmware, 8192);
答案 0 :(得分:0)
首先,您必须在访问内存映射时使用volatile关键字,此外,如果您接受两个页面(如果您接受4096字节),则在读取两个页面时必须使用uint8_t,因为它具有4096字节。但是,您要访问它的uint32_t指针,则for循环的最大值必须为4096/4,因为它具有4096/4个字。
uint8_t buffer_firmware[4096]
uint8_t *words0 = (volatile uint8_t *) BASE_ADDR_SECTOR_0;
uint8_t *words1 = (volatile uint8_t *) BASE_ADDR_SECTOR_1;
for(uint16_t i=0; i<4096; i++){
buffer_firmware[i] = words0[i];
}