한번의 read에 송신한 데이터를 전부 읽으려 했지만
(read()에서 block 되기 때문에 버퍼에 모든 값이 수신이 되어 있다면 read() 한번만 해도 문제가 없는거 아닌지요. 그래서 select 에서 fd 이벤트를 catch 한후 sleep 까지 걸어서 잠깐 기다렸다가 read 했으나 역시 문제가 있었습니다.)

문제는 특정 패턴의 데이터(일부분의 정상 데이터라도)가 수신이 안된다는 것입니다.

가령 0x01, 0x02, 0x03, 0x04

정도의 데이터(4바이트)만 보내고 받으려 해도

정상적으로 데이터 수신이 안된다는데 문제가 있습니다.

분명히 BAUDRATE는 맞추어 주었고(혹시나 9600, 57600, 115200 등으로 바꾸어서도)

데이터가 들어오기는 하는데 정확한 값이 아닙니다.

혹시나 해서 fork()후 자식 프로세서에서 pipe로 데이터를 전송해서 부모에서 읽어 들였을때에는 정상적으로 읽어들일수 있었습니다. (케이블을 통해서 수신할때만 문제가 생깁니다. ㅜㅜ)

그것으로 보아서 알고리즘에 문제가 있는것은 아닌것으로 보이지만 혹시 시리얼 포트로 들어오는 데이터를 read할때에는 주의해야 할점이 있는지 알고 싶습니다.

빠른 답변 부탁드립니다.

바쁘신 와중에도 답변을 주셔서 감사합니다.



>안녕하세요..
>
>설마 한번의 READ에 송신한 데이터를 모두 읽는 것을 아니겠죠???
>소스를 부분적으로 올리시면 저희도 어떤 부분이 잘못되었는지 확인 할 수가 없습니다..
>
>./ser_test2 테스틀 프로그램에서 정상적으로 송수신 하였다면 보드상의 문제는 아닙니다.
>
>일단 제공한 시리얼 예제 소스를 분석하셨어 참조하셔야 할것 같습니다.
>
>그럼 수고하세요..
>
>
>>보드 2개로 시리얼 통신 전송/수신 실습을 하고 있습니다.
>>
>>그런데 문제가 하나 있습니다.
>>
>>전송하는 측에서 char 배열로 값을 저장후 보내게 되는데
>>
>>받을때 전송한 만큼의 데이터를 수신하지 못하는거 같습니다.
>>
>>즉 20byte 를 보내도 n=read() 후 n의 값도 그때그때 틀리고 받은 값 역시 계속 상이한 데이터를 가져옵니다.
>>
>>예전 Q&A 자료를 보면 ./ser_test2 sttyS00 w 하는 테스트가 있었는데
>>
>>수신쪽 프로그램을 실행시킨후 위 테스트 프로그램을 실행시키면 수신쪽 프로그램에 데이터가 정확하게 수신되는 것을 확인하였습니다.
>>
>>아무튼 고수님의 조언이 필요합니다.
>>
>>감사합니다.  
>