SD 카드에 초당 약 20000-30000 바이트의 고속으로 데이터를 기록하는 데이터 로거 시스템을 만들고 있습니다. 그러나 arduino의 SD 라이브러리는 현재 초당 약 4500-5000 바이트의 데이터를 기록하므로 너무 느립니다.
쓰기 속도를 높이기 위해이 핵을 읽었 지만 SPISettings 를 조정하여 더 직접적인 접근 방식이 가능한지 궁금합니다 .
SD 카드에 초당 약 20000-30000 바이트의 고속으로 데이터를 기록하는 데이터 로거 시스템을 만들고 있습니다. 그러나 arduino의 SD 라이브러리는 현재 초당 약 4500-5000 바이트의 데이터를 기록하므로 너무 느립니다.
쓰기 속도를 높이기 위해이 핵을 읽었 지만 SPISettings 를 조정하여 더 직접적인 접근 방식이 가능한지 궁금합니다 .
답변:
확인. 그래서 SDFat lib를 사용해 보았습니다. 이 라이브러리는 adruino와 함께 제공되는 기본 SD 라이브러리보다 확실히 좋습니다. 그러나 이것이 저 데이터 전송률 문제를 해결하는 방법은 아닙니다.
이 게시물 에서 SDFat 라이브러리 작성자의 지시를 따랐 습니다 .
fat16lib 에 따르면 데이터 속도를 높이려면 flush ()를 현명하게 사용해야합니다. 우리는 각주기에서 데이터를 쓰려고하지만 100주기마다 한 번 정도 flush ()를 주기만하면됩니다. 또한 SD.open ()에 플래그를 'O_WRITE | 'FILE_WRITE'대신 O_CREAT '.
이로써 속도가 크게 향상되었습니다. 그러나 나는 더 필요했다!
바이너리로 데이터를 저장하면 ( 이 블로그를 확인 ) 성능이 훨씬 향상되었습니다.
내 현재 속도는 클래스 4 SD 카드에서 약 100-120KBps (킬로바이트)입니다!
마지막으로 여러분의 도움에 감사드립니다.
원하는 속도에 도달 할 수 있는지 여부는 여러 가지 요인으로 결정됩니다. 이 중 일부만
SdFat 도서관은 빠르게 아두 이노 IDE의 표준 SD 라이브러리보다. 또한 표준 SD 라이브러리와의 호환성 기능을 쉽게 사용할 수 있습니다. 사용해보십시오.
고급 SD 카드를 사용해야합니다. 아시다시피 SD 카드는 성능 등급으로 분류됩니다. 인터넷에있는 대부분의 사람들은 SanDisk SD 카드를 권장합니다.
악수가 버퍼를 얻는 것을 피하십시오!
SD.write (buf, size)를 사용하십시오 .
모두 안녕, 나는 같은 문제가있는 프로젝트에서 일하고 있습니다. 나는 당신의 같은 단계를 따르고 정확히 같은 숫자를 얻었다. 방금 해결했습니다. 문제는을 호출 할 때의 악수 SD.write()
입니다.
대신 :
//for each loop, it is going to make a handshake
while(<yourCondition>){
SD.write(<yourValue>);
}
하다:
char buf[length];
while(yourCondition){
buf[index] = yourValue;
}
SD.write(buf,index);//only one handshake
내 프로젝트에서 첫 번째는 4100 바이트를 얻었고 두 번째는 128 (buf [128]) 버퍼를 사용하여 내 프로젝트에서 145408 바이트를 얻었 습니다 . 충분하다.