강좌 & 팁
글 수 2,412
2012.08.25 19:33:40 (*.46.241.140)
49037
s3c6410의 최대 보레이트는 3Mbps입니다.
하지만 어쩐일인지 지금 사용중인 s3c6410기반의 g100 보드에서 576kbps를 넘는 속도로는 전송에 성공할 수 없었습니다. 쓰는 제품이 1Mbps가 기본세팅인지라 왠만하면 거기에 맞춰주려고 올려봤는데 안되더군요.
1152kbps로 설정하게 되면 115.2kbps로 속도가 떨어지고, 921.6kbps로 설정하면 833.3kbps로 속도가 떨어집니다.
소스들을 하루 종일 뒤진 결과 얻은 결론은
1. s3c6410의 시리얼 드라이버는 s3c24xx 코드에 기반해 여기저기 섞여있어서 그런지 최대 보레이트에 제한이 걸려있습니다.
s3c6400의 최대속도인 921.6kbps로 제한이 걸려있더군요. 코드를 보니 보레이트 제한 때문에 CBAUDEX 플래그가 떨어지고 115.2kbps로 된 거였습니다.
2. 921.6kbps로 설정하면 833.3kbps로 보레이트가 쳐집니다. 보레이트 변환에 버그로 막연히 추정할 뿐입니다.
====
여기까지 쓰고 구글링해서 찾은 패치.
acer-n311라는 pda를 위한 패치.
# increasing maximum UART baud rate is needed for bluetooth (1500000) s3c2410_serial-max-speed.patch
Index: linux-2.6.24/drivers/serial/s3c2410.c
===================================================================
--- linux-2.6.24.orig/drivers/serial/s3c2410.c 2008-02-15 18:24:04.000000000 +0100
+++ linux-2.6.24/drivers/serial/s3c2410.c 2008-02-15 18:26:09.000000000 +0100
@@ -760,7 +760,7 @@
* Ask the core to calculate the divisor for us.
*/
- baud = uart_get_baud_rate(port, termios, old, 0, 115200*8);
+ baud = uart_get_baud_rate(port, termios, old, 0, 115200*14);
if (baud == 38400 && (port->flags & UPF_SPD_MASK) == UPF_SPD_CUST)
quot = port->custom_divisor;
근데 찾아보니 acer-n311제품은 s3c2440쓰는데 이 제품이 s3c2440을 쓰는데, 얘는 시스템 클럭을 쓸 때에는 115.2kbps, 외부클럭 쓸때에는 921.6kbps까지 가능하다는데 어찌된건지..
횡설수설 삽질기였습니다.