AlexZavgorodniy Опубликовано 8 мая, 2020 Поделиться Опубликовано 8 мая, 2020 (изменено) Все доброго дня! Товарищи, прошу вашей помощи. Пытаюсь сделать устройство 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) = ((volatile uint32_t*)(FLASH_MSD_START_ADDR + blk_addr*STORAGE_BLK_SIZ)); } 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)); } break; case 1: break; default: return USBD_FAIL; } return (USBD_OK); /* USER CODE END 7 */ } При попытке форматирования в память МК ложиться всякая фигня. Спасибо!!! Изменено 8 мая, 2020 пользователем AlexZavgorodniy 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.