SPI 모드의 SD 카드는 칩 선택 / 슬레이브 선택을 존중합니까? 내 응용 프로그램에서 재설정 된 것 같습니다


9

16 비트 SPI를 통해 FPGA에 연결된 마이크로 컨트롤러 (NXP LPC1343 ) 가있는 응용 프로그램이 있습니다 . 동일한 SPI 포트 (MISO / MOSI)를 사용하지만 다른 CS / SS 핀을 사용하는 SD 카드도 있습니다 (SPI 사양에 따라 둘 다 활성 낮음). 내가해야 할 일 중 하나는 FAT32를 사용하여 FPGA의 데이터를 SD 카드의 파일에 쓰는 것입니다. 이것은 마이크로 컨트롤러의 역할입니다. 마이크로 컨트롤러는 FatFS를 실행하고 있는데 , 그 자체로 안정적으로 작동합니다.

마이크로 컨트롤러에는 적은 양의 RAM 만 있기 때문에 적은 양의 데이터 만 한 번에 버퍼링 할 수 있습니다. 따라서 마이크로는 FPGA에서 버퍼를 읽고 SPI 모드를 8 비트로 변경 한 다음 해당 데이터를 FATFS에 기록해야합니다. SPI 모드 용 SD 카드를 구성하려면 SPI 버스가 400kHz에서 실행되는 동안 명령을 보내야하며 일정량의 대기 시간이 발생해야합니다. 따라서 초기화를 한 번만 수행하고 싶습니다.

그러나 SD 카드에서 CS를 높게 유지 한 상태에서도 FPGA에서 트랜잭션을 수행하면 SD 카드가 이상한 상태가되어 다시 초기화해야합니다. 물론 4 kB 정도의 데이터를 쓰기 위해 초기화에 수 밀리 초가 걸릴 수 있기 때문에 이것은 바람직하지 않습니다 (내 마이크로의 작은 RAM 용량에 의해 제한됨). 가능한 빨리 몇 메가 바이트를 작성해야하므로 성능이 약 500kB / s에서 100kB / s 미만으로 줄어 듭니다.

SD 카드가 기술적으로 SPI를 완전히 준수하지는 않지만이 문제를 어떻게 해결할 수 있습니까?


내가 아는 한 그것을 존중해야합니다. 다른 SD 카드를 사용해 보시겠습니까?
Marko

이것은 좋은 질문입니다. 질문 해 주셔서 감사합니다.
막사

답변:


7

알았어, 실제로 알아 냈어 좀 더 깊게 봤어야 했어요. MMC / SDC 사용 방법 에 따라 버스를 공유 할 때 SD 카드가 SPI 장치처럼 정확하게 작동하지 않는 것으로 나타났습니다 .

SPI 버스에서 각 슬레이브 장치는 분리 된 CS 신호로 선택되며 여러 장치를 SPI 버스에 연결할 수 있습니다. 일반 SPI 슬레이브 장치는 SPI 버스를 공유하기 위해 CS 신호로 DO 신호를 비동기식으로 구동 / 릴리스합니다.

그러나 MMC / SDC는 SCLK와 동기화 할 때 DO 신호를 드라이브 / 릴리스합니다. 이는 MMC / SDC 및 SPI 버스에 연결된 다른 SPI 슬레이브와 버스 충돌 가능성이 있음을 의미합니다. 오른쪽 이미지는 MMC / SDC의 드라이브 / 릴리스 타이밍을 보여줍니다 (DO 신호는 1/2 V cc 로 당겨 버스 상태를 보여줍니다). 따라서 MMC / SDC 해제 DO 신호를 만들려면 마스터 장치가 CS 신호가 디 어설트 된 후 바이트를 보내야합니다.

SD 카드와 FPGA가 DO를 구동하려고했을 것이고 SD 카드가 손실되어 재설정되었습니다. 여분의 바이트를 전송하면 문제가 해결 된 것으로 보입니다.


이를 통해 FPGA와 카드를 번갈아 사용할 수 있습니다. 데이터 전송 및 재개 중에 중단 할 수 있다는 것도 알고 있습니까? elm-chan에 대한 내용에서 불가능한 것처럼 보이지만 확인 또는 반증 여부를 알고 싶습니다.
krs013 2016 년

1
예, FPGA와 SD를 교대로 예상 한대로 작동하지만 FatFS에 대한 호출 간 전송을 중단 할 수는 없습니다. 적어도 나는 그 일을 할 수 없었습니다. 즉, 공유 SPI 버스를 사용하여 파일 쓰기 및 센서에서 읽는 동안 인터럽트에 응답 할 수 없습니다 (예 :).
Zuofu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.