天天看點

AliOS Things 使用HAL庫的USB_DEVICE MSC調用SPI W25Q128

1.在此說明一下,這是學習記錄,其中肯定有很多問題

2.通過CubeMX選中USB_Device

AliOS Things 使用HAL庫的USB_DEVICE MSC調用SPI W25Q128
2.1選擇Middleware,注意選中MSC後改一下USB的緩沖大小為4096就是最後一個選項
AliOS Things 使用HAL庫的USB_DEVICE MSC調用SPI W25Q128
3.将生成的檔案夾拷貝到board下的對應闆子工程
AliOS Things 使用HAL庫的USB_DEVICE MSC調用SPI W25Q128

4.然後時這兩個函數實作,就是加粗部分(說句實話實作SPI調了很久,在其他地方好好的,到了USB中斷就不能用,其中就有SPI需要延時擷取SPI寫狀态,因為USB在中斷中跳不出去,HAL_Delay()直接不能用。說到這裡插一句SPI使用的是直接讀寫的方式不是中斷或者DMA)

int8_t STORAGE_Read_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)

{

/ USER CODE BEGIN 6 /

if (blk_len == 0)

{

return (USBD_FAIL);           

}

*if(w25q128_read(blk_addrSTORAGE_BLK_SIZ,buf,blk_len*STORAGE_BLK_SIZ) == 0)

return (USBD_OK);**
           

return (USBD_FAIL);

/ 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 /

return USBD_FAIL;           

*if(w25q128_erase_write(blk_addrSTORAGE_BLK_SIZ,buf,blk_len*STORAGE_BLK_SIZ) == 0)

return (USBD_OK);**           

return USBD_FAIL;

/ USER CODE END 7 /

5.這裡寫函數一定要注意,SPI寫入資料時,當遇到不是位址中不是0xFF資料時,寫入是無效的,是以USB寫入函數這裡一定要帶有擦除方式寫入,至于怎麼擦除,就看各位的SPI實作了

6.我添加了個中間檔案

AliOS Things 使用HAL庫的USB_DEVICE MSC調用SPI W25Q128

6.1就封裝了usb的初始化和其中斷實作

7.總結下調試過程當中的坑:

先把上面寫入和擦除函數裡的SPI實作注釋掉,一跑肯定就跑起來了(反正我是沒遇到跑不起來的情況),此時電腦上面就能檢測到U盤插入了,但是格式化是不成功的。

然後就是各種SPI讀寫的對接,真心話,我覺得最大的坑就是說好的有中斷嵌套呢,完全就不是那麼回事,當然也有可能水準低,沒找到正真原因

繼續閱讀