저의 보드에는 serial로 rs485를 사용 합니다.
일반적인 console로 사용 하기위해서 linux에서
지원이 되고 있는지요?
현재 test결과 tx는 잘되는데, rx를 못합니다.
cat /proc/interrupt해봐도 인터럽도 뜨지
않고요.
보통 rs485는 half-duplexx라서 rx관련해서
receive에대한 처리를 해주어야 할 것 같은데
어떤 가요?
보통 다른 컨트롤 핀을 on/off 해서 송신/수신 상태를 바꿔가면서 동작합니다. native로 동작하는 485 port 아닌 232에 드라이브하는 형태라면 거의 대부분 이런 형태입니다. 자동으로 해줄 수도 있겠지만... 하여튼 송수신 방향을 결정하는 컨트롤 핀을 찾아서 on/off 해주세요.
485는 선로가 4선이 아니라면 half 가 될 수밖에 없구요. 대부분 전압차를 이용한 2선을 사용하기 때문에 어쩔 수 없습니다.
시리얼 포트의 데이터를 주고받는 것은 당연히 read/write 하실거구요. 그외 각종 컨트롤 핀들의 제어도 하실 수 있습니다. 당연히 user 모드에서요. linux 에서 serial 프로그래밍하는 kldp 문서도 있었던 걸로 기억하는데 한번 찾아보시고 링크 달아주세요.
내부적으로 헨들을 하셔야 되는지는 모르지만...
보통 메세지가 도착했다고,
인터럽이 발생하지는 않고..
그냥 버퍼에 차곡차곡 싸이기만 합니다.
tx(전송)은 되는데, rx(수신)이 안돼는 경우거의
대부분은 결선문제이거나 세팅문제일 가능성이 높습니다.
1대1 통신의 rs232와 달리, 멀티드롭통신인 RS422,485의 경우는 DTE, DCE 계념이 있어서 이 세팅에 따라서..
rx가 되지 않는 경우가 있습니다.
상대 장치의 세팅과 보드의 세팅을 점검을 해보시는 것이 낳을 듯 싶습니다.
제 경험상 485는 시작과 끝의 시간이 아주 묘한 상황이 있어서 마지막 바이트처리에 문제가 생기는 경우가 있었습니다. on/off 하는 시간이 문제가 될 수도 있습니다. uart 로는 데이터가 완전히 시리얼 라인에 놓여서 전송이 끝났는지를 알 수가 없습니다. 알 수 있는 것은 마지막 바이트 (혹은 설정값) 가 하드웨어 버퍼에서 제거돼서 라인에 실었다는 것 뿐이라서 그것이 완전히 마지막 스톱비트까지 실렸다는 것을 어느정도 보장할 시간적인 여유를 주어야 합니다.
그리고, 여러개의 호스트들이 같은 선을 공유하고 있으므로, 마스터/슬래이브로 동작해야지 않으면 서로 충돌이 나서 패킷이 깨지는 경우도 있고 해서... (꼭 더미 허브에 물린 이더넷처럼) 상황에 맞는 처리가 필요합니다.
보통 다른 컨트롤 핀을 on/off 해서 송신/수신 상태를 바꿔가면서 동
보통 다른 컨트롤 핀을 on/off 해서 송신/수신 상태를 바꿔가면서 동작합니다. native로 동작하는 485 port 아닌 232에 드라이브하는 형태라면 거의 대부분 이런 형태입니다. 자동으로 해줄 수도 있겠지만... 하여튼 송수신 방향을 결정하는 컨트롤 핀을 찾아서 on/off 해주세요.
485는 선로가 4선이 아니라면 half 가 될 수밖에 없구요. 대부분 전압차를 이용한 2선을 사용하기 때문에 어쩔 수 없습니다.
맞죠? 제 기억으로는 그렇습니다... :oops:
그렇다면 user mode에서 가능 하다는 말씀인가요..?즉 현재 k
그렇다면 user mode에서 가능 하다는 말씀인가요..?
즉 현재 kernel을 건들지 않고 가능 한 것인가요?
아니면 간단하더라고 patch나 driver를 작성 해야 하는 건가요?
시리얼 포트의 데이터를 주고받는 것은 당연히 read/write 하실거구
시리얼 포트의 데이터를 주고받는 것은 당연히 read/write 하실거구요. 그외 각종 컨트롤 핀들의 제어도 하실 수 있습니다. 당연히 user 모드에서요. linux 에서 serial 프로그래밍하는 kldp 문서도 있었던 걸로 기억하는데 한번 찾아보시고 링크 달아주세요.
Re: rs485 serial port 지원 하나요
일반적으로 소프트웨어적인 측면에서은
rs232c와 100%동일합니다.
내부적으로 헨들을 하셔야 되는지는 모르지만...
보통 메세지가 도착했다고,
인터럽이 발생하지는 않고..
그냥 버퍼에 차곡차곡 싸이기만 합니다.
tx(전송)은 되는데, rx(수신)이 안돼는 경우거의
대부분은 결선문제이거나 세팅문제일 가능성이 높습니다.
1대1 통신의 rs232와 달리, 멀티드롭통신인 RS422,485의 경우는 DTE, DCE 계념이 있어서 이 세팅에 따라서..
rx가 되지 않는 경우가 있습니다.
상대 장치의 세팅과 보드의 세팅을 점검을 해보시는 것이 낳을 듯 싶습니다.
소프트웨어적인 측면에 관한 것은 아래의 문서를 읽어보세요.
http://bbs.kldp.org/viewtopic.php?t=26522
There is no spoon. Neo from the Matrix 1999.
시작점은http://wiki.kldp.org/wiki.php/Li
시작점은
http://wiki.kldp.org/wiki.php/LinuxdocSgml/Serial-Programming-HOWTO
여기서 하시고 이문서 끝의
http://www.easysw.com/~mike/serial/
가 아주 좋은 것 같습니다. 모뎀 비트 제어를 통해서 가능하리라 봅니다.
제 경험상 485는 시작과 끝의 시간이 아주 묘한 상황이 있어서 마지막 바이트처리에 문제가 생기는 경우가 있었습니다. on/off 하는 시간이 문제가 될 수도 있습니다. uart 로는 데이터가 완전히 시리얼 라인에 놓여서 전송이 끝났는지를 알 수가 없습니다. 알 수 있는 것은 마지막 바이트 (혹은 설정값) 가 하드웨어 버퍼에서 제거돼서 라인에 실었다는 것 뿐이라서 그것이 완전히 마지막 스톱비트까지 실렸다는 것을 어느정도 보장할 시간적인 여유를 주어야 합니다.
그리고, 여러개의 호스트들이 같은 선을 공유하고 있으므로, 마스터/슬래이브로 동작해야지 않으면 서로 충돌이 나서 패킷이 깨지는 경우도 있고 해서... (꼭 더미 허브에 물린 이더넷처럼) 상황에 맞는 처리가 필요합니다.
답변에 정말로 감사합니다.구글의 도움을 받다가 이렇게 명확하게 한글로
답변에 정말로 감사합니다.
구글의 도움을 받다가 이렇게 명확하게 한글로 된 답변을
들으니 너무 좋군요..
테스트 해보고 글 올리죠
댓글 달기