當前位置:編程學習大全網 - 源碼下載 - 如何修改戰艦板的USB讀卡器實驗為單磁盤讀取,教學貼

如何修改戰艦板的USB讀卡器實驗為單磁盤讀取,教學貼

源代碼:戰艦板 寄存器版本 實驗50 USB 讀卡器實驗。

目標:只要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卡的),這樣,就完成了對例程的修改。

  • 上一篇:丟棄中繼源代碼
  • 下一篇:期貨微交易投資外盤期貨技巧有哪些
  • copyright 2024編程學習大全網