永发信息网

如何修改战舰板的USB读卡器实验为单磁盘读取,教学贴

答案:1  悬赏:40  手机版
解决时间 2021-03-14 05:51
  • 提问者网友:我们很暧昧
  • 2021-03-13 19:48
如何修改战舰板的USB读卡器实验为单磁盘读取,教学贴
最佳答案
  • 五星知识达人网友:污到你湿
  • 2021-03-13 20:38
源代码:战舰板 寄存器版本 实验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
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
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卡的),这样,就完成了对例程的修改。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯