Всем доброго дня!
Товарищи, прошу вашей помощи. Пытаюсь сделать устройство Mass Storage с использованием внутренней памяти. ПК видит устройство и его объем (100кБ в моем случае). Но вот форматирование проходит неудачно.
мк STM32F103RC
дефайны следующие
#define FLASH_MSD_START_ADDR 0x08027000
#define STORAGE_LUN_NBR 1
#define STORAGE_BLK_NBR 0xC8
#define STORAGE_BLK_SIZ 0x200
функция чтения
Код:
int8_t STORAGE_Read_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
{
/* USER CODE BEGIN 6 */
uint32_t i;
switch (lun)
{
case 0:
for(i = 0; i < blk_len*STORAGE_BLK_SIZ; i += 4)
{
*(uint32_t*)(&buf[i]) = ((volatile uint32_t*)(FLASH_MSD_START_ADDR + blk_addr*STORAGE_BLK_SIZ))[i];
}
break;
case 1:
break;
default:
return USBD_FAIL;
}
return (USBD_OK);
/* USER CODE END 6 */
}
запись
Код:
int8_t STORAGE_Write_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
{
/* USER CODE BEGIN 7 */
FLASH_EraseInitTypeDef EraseInitStruct;
uint32_t PAGEError = 0;
uint32_t i;
switch (lun)
{
case 0:
for(i = 0; i < blk_len*STORAGE_BLK_SIZ; i += FLASH_PAGE_SIZE)
{
EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
EraseInitStruct.PageAddress = FLASH_MSD_START_ADDR + blk_addr*STORAGE_BLK_SIZ + i;
EraseInitStruct.NbPages = 1;
if (HAL_FLASHEx_Erase(&EraseInitStruct, &PAGEError) != HAL_OK)
{
// error
}
}
for(i = 0; i < blk_len*STORAGE_BLK_SIZ; i += 4)
{
HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD,FLASH_MSD_START_ADDR + blk_addr*STORAGE_BLK_SIZ + i , *(uint32_t*)(&buf[i]));
}
break;
case 1:
break;
default:
return USBD_FAIL;
}
return (USBD_OK);
/* USER CODE END 7 */
}
При попытке форматирования в память МК ложиться всякая фигня.
Спасибо!!!