[問題]ARM板上使用rs232之問題

看板LinuxDev作者 (skura)時間16年前 (2008/10/29 00:12), 編輯推噓8(8024)
留言32則, 8人參與, 最新討論串1/1
各位大大好~ 小妹最近再碰ARM的硬體 我有兩個ARM板,想透過RS-232來互相傳輸 ...我的TX端的程式是這樣的 : int main() { int fd; char buffer[]="0123456789"; int Length=255; int nByte; fd=open("/dev/ttyS1",O_RDWR | O_NONBLOCK); while(fd!=0) { nByte = write(fd,buffer,Length); printf(" buffer is= %s nByte=%d",buffer,nByte); } close(fd); } RX端: int main() { int fd; int nByte; char buf[255]; fd=open("/dev/ttyS1",O_RDWR ); if (fd==NULL) printf("open error\n"); while (nByte !=NULL) { nByte = read(fd,buf,255); printf("nByte=%d\n",nByte); printf("buffer is: %s nByte=%d", buf , nByte); } close(fd); } 可是不知道為什麼接收端的ARM板,好像收不到TX端要傳的字串,都顯示不出來 (rx端 極少數幾筆有正確顯示字串) 不知道有沒有大大們用過ARM板的rs232傳輸過,我是用C語言寫code, 我已經確認rs232是可以互相傳輸,rx為甚麼使用迴圈會發生錯誤, 是接收端buffer問題嗎~? 希望有經驗的大大解答^^ 如果我有什麼地方說明不好,我會再補充~謝謝各位~"~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.169.41.42

10/29 07:01, , 1F
建議由最底層的開始往上推bug處,不要先假設bug在那邊。
10/29 07:01, 1F

10/29 07:03, , 2F
例如可以拿Scope直接觀察兩端波形,確認硬體的收跟送正確
10/29 07:03, 2F

10/29 07:05, , 3F
電壓高低夠不夠,也要看是否符合IC的User Manual的規範
10/29 07:05, 3F

10/29 07:07, , 4F
往上推導過程中,依實際狀況,細心判斷實驗,
10/29 07:07, 4F

10/29 07:08, , 5F
先確認出 bug 是在軟體或者硬體。
10/29 07:08, 5F

10/29 07:10, , 6F
比較懶人的方法,就是找個版子可以跟你手上ARM板成功傳輸
10/29 07:10, 6F

10/29 13:04, , 7F
建議...1先將速度降低..2.轉rs232接pc 3.寫一個echo測試用
10/29 13:04, 7F

10/29 22:29, , 8F
while (nByte !=NULL) 可以請原po解釋一下這行的用意嗎?
10/29 22:29, 8F

10/29 22:34, , 9F
可以使用大寫X作推文來回覆,或者寄我信箱 Tks
10/29 22:34, 9F

10/30 11:16, , 10F
hi,因為我想要測試RX端不斷接收資料的情形,但我發現當TX
10/30 11:16, 10F

10/30 11:18, , 11F
tx端不斷接收到來自TX的字串,會出現亂碼,很像字串遺失似的
10/30 11:18, 11F

10/30 11:19, , 12F
不知道有沒有大大們使用過rs232會發生這種情形~
10/30 11:19, 12F

10/30 11:20, , 13F
因為我之後想利用ARM的rs232傳送MP3檔,so在測試會不會bug
10/30 11:20, 13F

10/30 17:27, , 14F
把XMODEM的CODE拿去做應用修改 應該可以改善....
10/30 17:27, 14F

10/30 19:20, , 15F
BAUD Rate 有設定對嗎?
10/30 19:20, 15F

10/30 22:40, , 16F
你有沒有想過,read回傳值可能是0 的狀況?
10/30 22:40, 16F

10/30 22:41, , 17F
畢竟這是兩個不同的state mechine 在溝通。
10/30 22:41, 17F

10/30 22:43, , 18F
如果你不是用hand-shake的話,請試著把TX接到RX吧
10/30 22:43, 18F

10/30 22:44, , 19F
蠻鼓勵你自己試著想程式如何驗證,還有如何判別bug處。
10/30 22:44, 19F

10/30 22:46, , 20F
不知 while (nByte !=NULL){/*...*/} 回圈後加個
10/30 22:46, 20F

10/30 22:46, , 21F
LED_LIGHT() or printf something 能否有幫助呢?
10/30 22:46, 21F

10/30 22:48, , 22F
我想說先驗證的程式是如你預期的在這回圈裡面等待訊息。
10/30 22:48, 22F

10/30 22:49, , 23F
因為我沒有你的版子,等你有空再試試看。 ^^ Tks
10/30 22:49, 23F

10/31 08:45, , 24F
有沒有示波器來量測輸出的波形
10/31 08:45, 24F

10/31 08:46, , 25F
不然還有一個簡單的方法,你可以把單一ARM的TX與RX相連
10/31 08:46, 25F

10/31 08:47, , 26F
如悲連線成功的話,可以先證明程式部份沒有問題
10/31 08:47, 26F

10/31 08:53, , 27F
BAU Rate?
10/31 08:53, 27F

10/31 11:19, , 28F
謝謝大家我會再試看看^^ 我baudrate兩個ttyS1確定為38400
10/31 11:19, 28F
※ 編輯: a910937 來自: 140.126.131.70 (10/31 11:23)

10/31 22:35, , 29F
問個蠢問題 你那條RS232線是null modem線嗎?
10/31 22:35, 29F

11/01 14:29, , 30F
yes~他是NULL MODEM的~
11/01 14:29, 30F

11/15 16:35, , 31F
掛上示波器就知道問題在那邊了
11/15 16:35, 31F

09/18 16:45, , 32F
要不要先用echo 和cat來測測看
09/18 16:45, 32F
文章代碼(AID): #191pdzXs (LinuxDev)
文章代碼(AID): #191pdzXs (LinuxDev)