BTUART사용시 질문

QnA 2009. 7. 16. 19:41
> > 깨진 문자라도 들어온다는건 문제없이 돌고 있는데...
> > serial 초기화가 잘못 된 것 같은데...
> > 죄송하지만, 좀 기다려 보시겠어요.
> > serial 했던 부분이 어디 있을텐데, 찾지를 못해서요.
> 그리고 문제가 더 있어요 타겟보드에서 호스트 컴퓨터로 깨진 문자가
>
> 전송되는거 말구도 호스트 컴퓨터에서 타겟보드로는 아무런 문자도
>
> 전송 되지 않던데요
>
> BTUART살려 놓은 커널 이미지 있이시면 좀 보내 주실수 없을까요?
>
> 시리얼 통신 관련 자료도 있으시면 염치 불구하고 ^^;;;
>
> 참고로 Hyper250B 보드 입니다.


========================================================================================================

255B 보드 linux source의 arch/arm/mach-pxa/xhyper255.c에서
아래와 같이 추가해 주시고 다시 컴파일 하시면 됩니다.
CKEN 부터 set_GPIO_mode() 까지 입니다.
깨진 data라도 들어오는건 전송은 이루어지고 있다는 뜻이거든요.
이부분은 해주신 것 같네요.

static void __init xhyper255_map_io(void)
{
pxa_map_io();
iotable_init(xhyper255_io_desc);

CKEN |= CKEN7_BTUART;
set_GPIO_mode(GPIO42_BTRXD_MD);
set_GPIO_mode(GPIO43_BTTXD_MD);


오실로스코프 있으시면, 가장 간단하게 확인 하는 방법은,
serial로 data 보내보고, 보드에서 serial connecter의 1, 3번을 찍어보는 것이 제일 좋습니다.


test할 때 연결은 serial 연결했을 때 남는 두핀(1:tx, 3:rx, 보드 입장입니다. pc의 serial port에서 board의 1:tx를 pc의 rx에, board의3:rx를 pc의 tx에)을 연결합니다. 그리고 jtag이나 다른 곳에서 ground 연결하고요.


serial 속도 바꿀 때 사용한 소스입니다.
각 옵션에 대해서는 저도 잘 모릅니다.
처음 만들 때는 하나하나 확인해 보지만, 일단 작성 끝나면, 그냥 가져다가 사용만 하거든요.
(아래 **** 부터 **** 까지 입니다.

******************************************************

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>

const int tty_speed[][2] = { // 에 정의되어 있음.
{ 1200, B1200 }, { 1800, B1800 }, { 2400, B2400 },
{ 4800, B4800 }, { 9600, B9600 }, { 19200, B19200 },
{ 38400, B38400 }, { 57600, B57600 }, { 115200, B115200 },
{ 230400, B230400 }, { 460800, B460800 }, { 500000, B500000 },
{ 576000, B576000 }, { 921600, B921600 }, { 1000000, B1000000 },
{ 1152000, B1152000 },
};


static int termspeed(const char *devname, int speed);


int main(void){
int fd;
termspeed(\"/dev/ttyS1\", 115200);
fd = open(\"/dev/ttyS1\", O_RDWR);
write(fd, \"abcd\", 4);
close(fd);
return 0;
}


static int termspeed(const char *devname, int speed){
int i, fd, realspeed;
struct termios term;

fd = open(devname, O_RDWR | O_NOCTTY);
if (fd < 0) return -1;

// tty 장치의 속도 찾음.
realspeed = 0;
for (i=0; i < (int)(sizeof(tty_speed) / sizeof(tty_speed[0])); i++){
if (tty_speed[i][0] == speed){
realspeed = tty_speed[i][1];
break;
}
}
if (realspeed == 0) return -1;

// 속도 바꾸기.
bzero(&term, sizeof(term));
term.c_cflag = realspeed | CRTSCTS | CS8 | CLOCAL | CREAD;
term.c_iflag = IGNPAR;
term.c_oflag = 0;

term.c_lflag = 0; /* non-canonical, no echo,...) */
term.c_cc[VTIME]= 0; /* 타임아웃 해제 */
term.c_cc[VMIN] = 1; /* 1 문자만 오더라도 블럭킹 해제 */

tcflush(fd, TCIFLUSH);
if (tcsetattr(fd, TCSANOW, &term) != 0)
return -1;

close(fd);
return 0;
}

*****************************************************

test 할 때는 위의 소스 컴파일 해서 보드에 올리고,
부팅후에 한번 실행만 해줍니다.
serial에 설정한건 close와 관계없이, 다시 바꿔주기 전까지는 유지가 됩니다.
그리고 console로 사용 중인 ffuart에서
echo \"abcd\" > /dev/ttyS1
해서 btuart에 연결 serial에서 문자 출력되는 것 확인했고요.
cat /dev/ttyS1
해 둔다음에, btuart에 연결된 serial로 문자보내면, console로 문자 나오는 것 확인했습니다..



'QnA' 카테고리의 다른 글

Re: rs_init()  (0) 2009.07.26
/dev/ttyS, "Input/output error"  (0) 2009.07.18
external memory interface  (0) 2009.07.16
UART 콘트롤러 칩 추가..  (0) 2009.07.16
16C554 칩(4CH UART) 포팅 관련질문입니다.  (0) 2009.07.16

WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,