2013-11-14 7 views
2

현재 Micrium OS-II를 사용하는 ST32 (STM32F103xC) 용 애플리케이션을 개발 중입니다. 지금까지는 모든 것이 순조롭게 진행되었지만 지금은 블록을 맞았고 계속 진행할 수 없습니다.디바이스를 USB 드라이브로 설정 한 ST32의 FATFS

보드는 SD 카드를 사용하여 USB 저장 장치로 작동하도록 구성되어 호스트 PC가 장치에 저장된 파일을 복사 할 수 있습니다. Windows 탐색기에서 현재 SD 카드에있는 파일을 볼 수 있기 때문에 정상적으로 작동합니다.

그러나 FATFS를 사용하여 프로그램에서 파일을 만들려고하면 f_open()이 FR_NOT_READY를 반환합니다. 추가로 조사하기 위해 필자는 SD에 파일을 쓰는 샘플 코드를 작성하여 정상적으로 작동합니다. 그래서 필자는 필자의 프로그램에서 글쓰기 코드를 옮겼다. 필자가 OS 멀티 태스킹 틱을 시작하기 전에 f_open을 호출하면 제대로 작동했다. 파일을 열어 쓸 수 있었다. 진드기가 활성화 된 직후 (하지만 작업이 만들어지기 전에) 코드를 다시 작성하면 FR_NOT_READY가됩니다.

나는 이것이 무엇을 의미하는지 잘 모르겠다. 파일에 쓸 수있는 부분에 제한이 있습니까? 필기시 멀티 태스킹을 비활성화해야합니까? (아야, 틀림없이?) 내가 현재 USB 장치로 사용하고있는 SD 카드에 쓸 수 없다는 것인가?

+0

ffconfig.h 파일에서 _FS_REENTRANT가 0으로 설정되면 어떻게 될까요? –

+0

아니, 여전히 파산. FATFS 작업 중에 SD 카드 코드를 혼동시키는 USB 인터럽트와 관련이있는 것으로 보입니다. –

+0

이 장치에는 전용 SD 카드 컨트롤러가 있습니까? 아니면 SPI를 사용해야합니까? –

답변

4

실제로 대용량 저장 장치로 SD 카드를 외부 USB 호스트에 노출 할 수없고 동시에 파일 시스템으로 로컬로 마운트 할 수도 없습니다.

조금 더 명확히하기 위해 실제로 하드웨어에 대한 간단한 중재로이 작업을 시도 할 수 있지만 데이터 손상이 아니라면 불일치가 발생합니다. 각 파일 시스템 코드는 파일 시스템 수정의 자유 즉시 변경 사항을 일관성있게 커밋하지 않아도됩니다.안전성은 메모리에 캐시 된 파일 시스템 데이터가 여전히 유효하다고 가정합니다. 다른 사람이 저장 블록을 변경할 필요가 없기 때문에을 말합니다.

호스트 두 명이 저장소 볼륨에 액세스하게하려면 네트워크 파일 시스템에 공통적 인 다중 클라이언트 일관성 보호 기능을 구현해야합니다. FAT는 분명히 그 예가 아닙니다.

옵션을 열거, 다음이 가능해야한다 :

A) 인터페이스 SD 카드와 USB, 로컬 액세스

B) 인터페이스 SD 카드를 사용하지 않고 대용량 저장 장치 로 SD 카드를 노출 로컬 파일 시스템 코드와 함께; 또한 어떤 다른 목적을 위해 USB 인터페이스 을 가지고 있습니다.대용량 저장 모드가없는.

C) 인터페이스 SD 카드와 USB, 로컬 파일 시스템으로 SD 카드를 관리하고, 상기 하나 이상의 지원) 일관성을

D를 관리하는 네트워크 파일 공유 형 메커니즘을 통해 PC 액세스 권한을 부여하지만, 같은 독립 모드 은 동시에 활성화 할 수 없으므로 사이에서 전환하려면 상당한 노력이 필요합니다.

관련 문제