요새 uSD-Card를 보드에 직접 납땜을 해서,

파일을 수정할 방법을 강구하다가 USB MSC(Mass Storage Device Class)를 공부하게 됐습니다.
2일 동안 회사에서 의자에 붙어서 열심히 팠습니다. ㅠㅠ

된다고 하는 여러 예제들이 있었는데, 왜 나만 안되는 것인지.. 참 답답했는데,
원인은 여러가지겠지만, 
가장 큰 원인은 인터럽트 우선순위를 설정하지 않고 모두 0으로 놓으니 동작이 안됐던 것 같았습니다.

그럼, 차근차근 설명을 해 보겠습니다.
제가 테스트하는 H/W 는 
1. SD-Card SDIO-4Bit DMA , 
2. USB Device Only , 
3. Embedded DFU 방식으로 F/W Upload. (BOOT0 핀과 GPIO INPUT 핀에 공통으로 스위치 사용)
4. BOOT1 을 GPIO OUT(LED OUT) 과 공통으로 사용.
5. RCC(HSE)로 24MHz Crystal 사용.
6. Middle Wares -> FATFS -> SD Card 설정.
7. SDPWR 은 필요 없는 기능이니 신경쓰지 마시고요.
으로 어제와 동일합니다.




어제 쓴 글에서는 디렉토리만 읽어서 USB CDC로 표시만 할 수 있었는데, 이번에는 MSC로 읽기 쓰기를 구현해 보고자,
CUBEMX 툴에서 USB_DEVICE 타입을 Mass Storage Class 로만 변경했습니다.






클락 탭의 설정은 다음과 같습니다.






다음은 CUBEMX 의 Configuration TAB의 상세 설정입니다. 
바꾼 것들만 설명을 할 것인데, 그 외의 설정은 디폴드 설정으로 건드리지 않았습니다.
NVIC 는 각각의 상세 설정에도 있고, 따로 NVIC 설정이 분리되어 있는데, 맨 마지막에 NVIC를 수정할 예정입니다.

















다음은 NIVC(인터럽트 우선순위) 설정으로 어떻게 정하는지 저도 잘 모르겠습니다만, MSC 안 되었던 이유 중 가장 큰 원인이, 이 우선순위를 수정하지 않고 모두 우선순위가 0(Default)으로 내버려 뒀기 때문이었습니다.
나중에 같은 실수를 방지하기 위해, 어떤 기준으로 정하는 것인지 확실히 정리해야 할 것 같습니다.






다음으로 HEAP 과 STACK 을 충분히 잡아 두라해서 일단은 최적화는 못했고, 무식하게 크게 잡아두었습니다.





글이 생각보다 너무 길어지고 시간이 너무 늦어서, S/W 쪽은 눈을 좀 붙이고 시간이 나면 작성하도록 하겠습니다.
제가 여러가지를 참고해서 S/W를 만들었는데, 일단 참고한 윕사이트를 링크해 드립니다.



+ Recent posts