SDIO - 4Bit 방식으로 SD-Card 를 STM32F4xx 와 연결했고,

USB MSC(Mass Storage Class) 로 PC 와 연결하면 USB Drive 가 생성되는 프로그램에서 테스트한 결과입니다.

우선, SDIO-4bit , SDIO CLK-42MHz 로 설정했는데 USB MSC로 동작 시키면 생각 보다 너무 느립니다.
몇 MByte/s 쯤 나오지 않을까 생각 했는데 1MByte/s 도 안나옵니다.

기본적인 원인은 USB_FS 최대 속도가 12Mbit/sec (1.5MByte/s) 라는 점입니다.
여러가지 콘트롤을 위한 패킷을 빼면 1Mbyte 정도 나오리라 예상이 되는데, 그래서 몇 MByte/s 는 나올리가 없는 것이죠.




다음은 SDIO CLK 을 여러가지 값으로 변경시의 속도 입니다. 
위의 USB Speed 를 SDIO CLK 테스트를 해 보고 나서 알아서, 왜 이런 쓰잘떼기 없는 테스트를 했나 하는 자괴감이 드네요. ㅜㅜ
[아래 그림의 번호 설명]
1. 약 3MByte 의 파일 5개를 PC에서 STM32F4xx 의 USBMSC 로 Copy.
2. 약 3MByte 의 파일 5개를 STM32F4xx 의 USBMSC에서  PC로 Copy.
3. 약 250MByte 의 파일 1개를 PC에서 STM32F4xx 의 USBMSC 로 Copy.
4. 약 250MByte 의 파일 1개를 STM32F4xx 의 USBMSC에서  PC로 Copy.




혹시 Sector 의 크기와 속도의 관계는 없는 것인가 하는 생각에, 섹터 크기를 CUBEMX 툴 설정에서 512 에서 4096으로 늘려서 테스트 해 봤습니다. 




별 차이 없었습니다.




섹터를 변경할 때에, MSC 에 의해 생성된 USB Drive 포맷도 할당 단위 크기를 변경해서 수행했습니다.
섹터의 크기는 디스크의 반응 속도에 영향을 미쳤습니다.
섹터가 많으면 그 만큼 파일을 검색하는 시간이 많이 걸리는 듯 하여, 더 많은 시간이 지나야 USB Drive 가 PC에서 나타나네요.
즉, USB MSC 의 할당 단위가 크면(512바이트 보다 4096 바이트가) 응답 속도가 빠르다.





참고 : [USB 버전 별 속도 비교]




esp8266 FTP 서버의 전송 속도를 개선하는 방법을 여러가지 찾아보고 적용해 봤습니다.


전송 속도에 관련된 사항은 다음과 같습니다. 
1. WIFI FTP BUFFER 의 크기 : ESP8266FtpServer.h 파일에 FTP_BUF_SIZE 로 정의가 되어 있는데,
   크기가 기본으로 1024 // 512 로 설정되어 있는데 이 설정으로는 너무 느리다.
   512 로 9KB/s , 1024로 18KB/s 밖에 안나온다.
   하지만 이 크기를 1460 의 배수인 1460*2 로 바꾸면 460KB/s 의 속도가 나온다. 
   이 속도는 SD-Card에서 읽어서 PC로 전송하는 속도이고, SPI Single 방식의 SD-Card Write 시에는 약 86KB/s 가 나온다.
   즉, SD 카드를 읽는 데는 엄청 빠른데, 쓸 때는 SPI Single 에다가 Write 할 동안 기다려야 하므로 아주 느리다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <SPI.h>
#include <SD.h>
//#include <FS.h>
#include <WiFiClient.h>
 
#define FTP_SERVER_VERSION "FTP-2016-01-14"
 
#define FTP_CTRL_PORT    21       // Command port on wich server is listening  
#define FTP_DATA_PORT_PASV 50009  // Data port in passive mode
 
#define FTP_TIME_OUT  5      // Disconnect client after 5 minutes of inactivity
#define FTP_CMD_SIZE 255 + 8 // max size of a command
#define FTP_CWD_SIZE 255 + 8 // max size of a directory name
#define FTP_FIL_SIZE 255     // max size of a file name
//#define FTP_BUF_SIZE 1024 //512   // size of file buffer for read/write
#define FTP_BUF_SIZE 2*1460
cs

2. CPU Clock 속도 Up : 80MHz 에서 160MHz 로 올리면 조금 더 빨라진다. 
3. SPI CLK 속도 UP : 현재 24MHz 까지 올렸는데 50MHz 까지 올려 볼 예정이다.
  이 과정은 선 길이에 영향을 많이 받기 때문에, PCB가 나와봐야 알 수 있을 것이다.


버퍼 크기는 1460 배수가 아니면 속도 차가 읽기 모드에서 최대 51배나 차이가 납니다.
쓰실 때, 꼭 알아두세요. ^^

다음은 FTP 서버에서 PC로 전송시 속도를 동영상으로 찍어 봤습니다.


+ Recent posts