[RPI-PICO] 라즈베리파이 피코를 호스트로 해서 USB MSC 모드 작동을 시켜볼때 필요한 이해 정리

Posted on

우선 하드웨어 구성을 단순화해보면요.

이런 구성이구요. 성공의 관건은 라즈베리파이 피코에 붙어 있는 USB 단자에 USB 메모리를 연결하면 작동하느냐입니다. 전원 공급을 받는 단자이기도 하고, PC와 통신하는 단자이기도 한데요. PC와 통신은 BOOTSEL 모드로 작동시키듯이 내장 플래시에 데이터를 주고받는게 되니, 이를 활용해서 USB 메모리를 달아보려고 하는데요. USB MSC (USB Mass Storage Class) 모드로 설정해서 해보려고 하네요. 하드웨어적인 지원이 된다면 나머지는 어떻게 프로그램하느냐인데 이에 대해 아래 지식을 대략 파악해두었습니다.

  • USB MSC 모드의 개요
  • USB endpoint 설정
  • USB descriptor 설정
  • TinyUSB로 라즈베리파이 피코에 맞게 코드화

이정도해두고 작동을 실험해보고 되면 더 심화해서 배워두어야죠. 하드웨어가 지원이 안되는 구조라면 폐기하고 FatFS를 더 튜닝해서 microSD로 이어서 할 생각입니다.

우선 endpoint0처럼 반드시 들어가야 하는 정보는 TinyUSB를 쓰더라도 직접 설정을 해야 할 수도 있고, 되어 있어도 튜닝하거나 아예 처음부터 다시 짜는 것에도 필수적인 처리네요. 여기에 endpoint를 더 두어 읽기와 쓰기 모드를 구현해야 하는데 이게 CBW(Command Block Wrapper)와 CSW(Command Status Wrapper)로 되어 있는 것 같구요. 이 두가지 Wrapper 사이를 Data In, Data Out 등으로 구별해서 작동시키는 얼개가 있네요. 지금 파악을 못한 것은 TinyUSB로 할때, 예제코드들을 보면 실재 작동은 매우 간결한 함수 몇개를 main에 두고 하는 것인데, 이를 세부적으로 지정하는 코드는 따로 함수를 만들어 써야 하는 것 같으나 이 구조를 더 명시적으로 보여주는 것이 있으면 좋겠네요.

우선 USB MSC가 구현되어 USB 메모리가 인식이 되면 FatFS를 얹어서 작동하면 일단은 장치가 인식된 것이고, 여기에 적절하게 텍스트 파일을 만들어서 내용을 기록하면 되네요. USB 메모리도 튜닝해야 하구요. MSC 모드는 아니지만 microSD도 테스트해야 한다면, FatFS의 ff.c 와 같은 파일과 다른 부속파일을 뒤져보고 microSD 카드에 맞는 매트릭으로 튜닝하면 좋죠. 우선 기존의 프로젝트를 찾아서 참고하고 바꾸어보고 작동을 우선 시켜봐야 할 것입니다.

이게 다 되면 일단 USB MSC로 USB 메모리 카드 입출력이 된다는 의미이니, Full speed 모드와 일반 모드를 구별해서도 해보고, 이를 I2S 방식의 오디오 재생 기능과 맞물리게 해서 하면 될 것입니다.

FatFS의 경우 f_mount()를 해서 microSD 카드를 마운트부터 하던데 USB 메모리를 쓸때는 어떤지 미확인이네요. microSD 카드의 경우 f_mount()가 실패해서 읽고 쓰는 기능으로 넘어가지를 못했는데, USB MSC 모드로 라즈베리파이 피코를 설정해두고 USB 메모리를 장착한 경우, FatFS로 연동할때 어떻게 될지도 관건입니다.

이런 시도나 아이디어가 그냥 생각해본 것으로 그칠 수도 있으나, 일단 유튜브에서 보면 엔지니어들도 이 아이디어를 제시하는 경우가 있네요.

여튼 이정도 파악하고 하드웨어 구성을 해야겠습니다. 지금 구성으로도 일단 USB 메모리 장착 실험이 가능합니다.


이 구현의 경우 Host를 라즈베리파이 피코로 두는 방안이 있는 것 같은데 해봐야죠.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다