How do I make stm32 and w25q128 work as a usb msc?
I am trying to use stm32f407 and w25q128 to get a usb drive, for this I wrote a driver to control the flash drive and initialized the USB MSC using CubeMX. When I connect the stm32 to the PC (Ubuntu) I see the new storage device in the Disks app but it doesn't mount, I tried to erase it but the process freezes until I reboot the board
w251128 has:
PageSize = 256
SectorSize = 4096
SectorCount = 4096
PageCount = 65536
BlockSize = 65536
CapacityInKiloByte = 16Mb
Based on this information, I set the defines in `usbd_storage_if.c`:
```
#define STORAGE_LUN_NBR 1
#define STORAGE_BLK_NBR 0x1000
#define STORAGE_BLK_SIZ 0x1000
int8_t STORAGE_Read_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
{
w25q_readSector(buf, blk_addr, 0, blk_len * 4096); // 0 is offset
return USBD_OK;
}
int8_t STORAGE_Write_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
{
w25q_eraseBlock(blk_addr);
w25q_writeBlock(buf, blk_addr, 0, blk_len * 4096);
return USBD_OK;
}
```
I added some printfs inside these methods to notify the start and end of the process, if I erase blocks/sectors/pages from the main function in `main.c` everything goes fine, but when I try to erase the flash drive using PC OS and `usbd_storage_if.c` I see that the process just started but never finished, also adding the above code to the read function gives the following popup window "Error wiping device: Failed to probe the device 'dev/-sdb' (udisks-error-quark, 0)".
I also tried to comment out the w25q code and replace it with memcpy to work with internal memory, this works as expected, but how do I use external SPI flash memory as the MSC?
