컴퓨터 지식 네트워크 - 컴퓨터 백과사전 - 전함 보드의 USB 카드 리더 실험을 단일 디스크 읽기, 교육용 스티커로 수정하는 방법

전함 보드의 USB 카드 리더 실험을 단일 디스크 읽기, 교육용 스티커로 수정하는 방법

소스 코드: 전함 보드 레지스터 버전 실험 5 USB 카드 리더 실험.

대상: 디스크가 하나만 있고 SPI 플래시 디스크입니다.

지식 포인트:

1, MAX_LUN 은 디스크 수, , 1, 1, 2, 2, 3 등

2,

1 exex 등을 나타냅니다

2 extern u32mass _ block _ size [max _ LUN+1];

3 extern u32mass _ block _ count [max _ LUN+1];

디스크 정보를 나타내는 데 매우 중요한 세 가지 배열, 디스크 크기를 나타내는 Mass_Memory_Size, 디스크 블록 크기 (섹터 크기) 를 나타내는 Mass_Block_Size, mass _ block

3, MAL_Write 및 MAL_Read 함수. 기본 디스크의 읽기 및 쓰기 작업을 수행하는 데 사용됩니다. 즉, USB 읽기 및 쓰기 인터페이스는 반드시 구현되어야 합니다.

위의 지식 포인트를 통해 수정 방법을 살펴보겠습니다.

1 단계, MAX_LUN 수정 (원래 1) 은 디스크가 하나만 있음을 나타냅니다. MAX_LUN 은 mass_mal.h 파일에 있습니다.

단계 2, MAL_Write 및 MAL_Read 함수 수정, 수정된 코드는

1/* * * * * * * * * * * * * * * * * * * * * * * * * * * * 입니다 Function name: mal _ write

3 * description: write sectors

4 * input: none

5 * Output: none

6 * return: , ok

7 1, 페일

8 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *. U32 * write buff, u16 transfer _ length)

1 {

11 u8 sta;

12 스위치 (LUN)

13 {

14 case:

15 sta = ;

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:

2 STA=;

21 SPI _ flash _ write ((u8 *) writebuff, memory _ offset, transfer _ length);

22 break;

23default:

24 return mal _ fail;

25}

26 if(STA! =)return MAL_FAIL;

27 return MAL_OK;

28}

29

3/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * Function name: mal _ read

32 * description: read sectors

33 * input: none

34 * Output: none

35 * return: , ok

36 1, 페일

37 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *. U32 * read buff, u16 transfer _ length)

39 {

4 u8 sta;

41 스위치 (LUN)

42 {

43 case:

44 sta = ;

45 SPI _ flash _ read ((u8 *) read buff, memory _ offset, transfer _ length);

46//sta = SD _ readdisk ((u8 *) read buff, memory _ offset > > 9, Transfer_Length> > 9);

47 break;

48 case 1:

49 STA=;

5spi _ flash _ read ((u8 *) read buff, memory _ offset, transfer _ length);

51 break;

52 default:

53 return mal _ fail;

54}

55 if(STA! =)return MAL_FAIL;

56 return MAL_OK;

57}

보시는 바와 같이 switch case 을 SPI FLASH 작업으로 변경하여 디스크가 하나만 있는 경우 switch 는 항상 일 수 있으며 SPI FLASH 가 작동됩니다.

단계 3, main 함수에 의한 Mass_Memory_Size 와 같은 세 배열의 초기화를 수정하고 수정된 코드는 다음과 같습니다.

1//if (SD _ initialize ()) lce ); //SD 카드 오류 감지

2 // else //SD 카드 정상

3 // {

4 // Lcd _ showstring (6,13,2,16,16, "SD 카드 크기: MB");

5//mass _ memory _ size [] = (long long) SD _ getsectorcount () * 512; //SD 카드 용량 (바이트) 을 얻습니다. SD 카드 용량이 4G 를 초과하면

6 // Mass_Block_Size[] =512 를 나타내는 두 개의 u32 가 필요합니다. //Init 에 SD 카드를 설치한 운영 바이트가 512 개이므로 여기는 512 바이트여야 합니다.

7//mass _ block _ count [] = mass _ memory _ ssy

8//LCD _ shownum (164,13, mass _ memory _ size [] > > 2,5,16); //SD 카드 용량 표시

9 //}

1 if(SPI_FLASH_TYPE! = w25q64) LCD _ showstring (6,13,2,16,16, "w25q64error!" ); //SD 카드 오류 감지

11 else//SPI 플래시 정상

12 {

13 mass _ memory _ size [] = 124 * 124) //처음 6M 바이트

14 Mass_Block_Size[] =512; //Init 에 SD 카드를 설치한 운영 바이트가 512 개이므로 512 바이트여야 합니다.

15 mass _ block _ count [] = mass _ memory _ size [

16 LCD _ showstring (6,15,2,16,16, "SPI 플래시 크기: 6144kb");

17}

보시다시피 SD 카드를 부분적으로 마스킹한 다음 Mass_Memory_Size, Mass_Block_Size 및 Mass_Block_Count 를 볼 수 있습니다

上篇: 복사기 수리 비용은 얼마입니까 下篇: 좋은 농담은 어디에 있나요?
관련 내용