目標:只要1個磁盤,且是SPI FLASH盤。
知識點:
1,MAX_LUN 用於表示多少多少個磁盤,0,表示1個,1表示2個,2,表示3個.... 以此類推
2,
1 extern long long Mass_Memory_Size[MAX_LUN+1];
2 extern u32 Mass_Block_Size[MAX_LUN+1];
3 extern u32 Mass_Block_Count[MAX_LUN+1];
這三個數組,非常重要,用來表征磁盤的信息,Mass_Memory_Size表示磁盤大小,Mass_Block_Size表示磁盤塊大小(扇區大小),Mass_Block_Count用於表示塊數目,即扇區個數。
3,MAL_Write函數和MAL_Read函數。用來實現底層磁盤的讀寫操作。也就是USB讀寫的接口,必須實現。
有了以上知識點,再來看看修改方法:
步驟1,修改MAX_LUN 為0(原來是1),表示只有壹個磁盤。MAX_LUN 在mass_mal.h文件。
步驟2,修改MAL_Write函數和MAL_Read函數,修改後代碼如下:
01 /*******************************************************************************
02 * Function Name : MAL_Write
03 * Description : Write sectors
04 * Input : None
05 * Output : None
06 * Return : 0,OK
07 1,FAIL
08 *******************************************************************************/
09 u16 MAL_Write(u8 lun, u32 Memory_Offset, u32 *Writebuff, u16 Transfer_Length)
10 {
11 u8 STA;
12 switch (lun)
13 {
14 case 0:
15 STA=0;
16 SPI_Flash_Write((u8*)Writebuff, Memory_Offset, Transfer_Length);
17 //STA=SD_WriteDisk((u8*)Writebuff, Memory_Offset>>9, Transfer_Length>>9);
18 break;
19 case 1:
20 STA=0;
21 SPI_Flash_Write((u8*)Writebuff, Memory_Offset, Transfer_Length);
22 break;
23 default:
24 return MAL_FAIL;
25 }
26 if(STA!=0)return MAL_FAIL;
27 return MAL_OK;
28 }
29
30 /*******************************************************************************
31 * Function Name : MAL_Read
32 * Description : Read sectors
33 * Input : None
34 * Output : None
35 * Return : 0,OK
36 1,FAIL
37 *******************************************************************************/
38 u16 MAL_Read(u8 lun, u32 Memory_Offset, u32 *Readbuff, u16 Transfer_Length)
39 {
40 u8 STA;
41 switch (lun)
42 {
43 case 0:
44 STA=0;
45 SPI_Flash_Read((u8*)Readbuff, Memory_Offset, Transfer_Length);
46 //STA=SD_ReadDisk((u8*)Readbuff, Memory_Offset>>9, Transfer_Length>>9);
47 break;
48 case 1:
49 STA=0;
50 SPI_Flash_Read((u8*)Readbuff, Memory_Offset, Transfer_Length);
51 break;
52 default:
53 return MAL_FAIL;
54 }
55 if(STA!=0)return MAL_FAIL;
56 return MAL_OK;
57 }
可以看到,我們將switch case0,改為了SPI FLASH的操作,這樣,只有壹個磁盤的情況,switch永遠只可能是0,然後操作的就是SPI FLASH了。
步驟3,修改main函數對Mass_Memory_Size等三個數組的初始化,修改後代碼如下:
01 // if(SD_Initialize())LCD_ShowString(60,130,200,16,16,"SD Card Error!"); //檢測SD卡錯誤
02 // else //SD 卡正常
03 // {
04 // LCD_ShowString(60,130,200,16,16,"SD Card Size: MB");
05 // Mass_Memory_Size[0]=(long long)SD_GetSectorCount()*512;//得到SD卡容量(字節),當SD卡容量超過4G的時候,需要用到兩個u32來表示
06 // Mass_Block_Size[0] =512;//因為我們在Init裏面設置了SD卡的操作字節為512個,所以這裏壹定是512個字節.
07 // Mass_Block_Count[0]=Mass_Memory_Size[0]/Mass_Block_Size[0];
08 // LCD_ShowNum(164,130,Mass_Memory_Size[0]>>20,5,16); //顯示SD卡容量
09 // }
10 if(SPI_FLASH_TYPE!=W25Q64)LCD_ShowString(60,130,200,16,16,"W25Q64 Error!");//檢測SD卡錯誤
11 else //SPI FLASH 正常
12 {
13 Mass_Memory_Size[0]=1024*1024*6;//前6M字節
14 Mass_Block_Size[0] =512;//因為我們在Init裏面設置了SD卡的操作字節為512個,所以這裏壹定是512個字節.
15 Mass_Block_Count[0]=Mass_Memory_Size[0]/Mass_Block_Size[0];
16 LCD_ShowString(60,150,200,16,16,"SPI FLASH Size:6144KB");
17 }
可以看到,我們將SD卡部分屏蔽了,然後Mass_Memory_Size,Mass_Block_Size和Mass_Block_Count等三個數組,我們將數組元素0,改為了SPI flash的相關信息(原來是SD卡的),這樣,就完成了對例程的修改。