請高手幫小妹解惑><(關於s3c2410 uart..)

我們生活周遭存在太多太多的 embedded system ,過去 embedded system 有專屬的 OS,現在 linux 也可以應用在嵌入式環境,不過本版將廣泛討論所有嵌入式系統不只 linux 喔,歡迎有這方面經驗或有興趣的朋友一同進來討論。

版主: chester

請高手幫小妹解惑><(關於s3c2410 uart..)

文章Sakura » 週二 9月 09, 2008 3:14 pm

小妹我有兩個s3c2410的板子,os為linux(2.4):shock:
最近嘗試用兩個Arm板 來試著透過uart來互相傳輸資料~
從ttyS0傳一筆隨意資料到ttyS1,兩個ARM板用rs-232串接在彼此的ttyS1孔,ttyS0接上PC的終端機,
可是資料一直傳不到ARM接收端....

是不是不能這樣子直接傳輸呢?
不知道是否有 碰過s3c2410 uart相關經驗的大大們能幫小妹解惑...
小妹已經被困或許久了
拜託拜託><
:(
Sakura
 

文章ssc » 週五 9月 12, 2008 12:46 pm

請問一下,你的兩塊板子都有分開驗證過他們的UART 都是好的嗎? 都可以work 嗎?
假如都是好的,你用的 rs232的接頭是什麼樣的呢? 你要兩個對接做直接傳輸的話,應該是要用所謂的 NULL MODEM 的 cable。 因為這樣妳在 A 板子上的 TX 才會連到 B 板子上的 RX。 A 板子的 RX 才會連到 B 板子上的 TX。

希望對你有幫助。
ssc
可愛的小學生
可愛的小學生
 
文章: 12
註冊時間: 週四 8月 21, 2008 5:44 pm

文章a910937 » 週一 9月 15, 2008 3:30 pm

謝謝您的回覆~~:-D
我的UART已經驗證過都是好的且可以正常work~
我的rs232接頭是九孔的那種...
NULL MODEM 的 cable? = ="
請問那是甚麼東西呢?

不知道有沒有先進們可提供參考關於uart的傳輸or控制方面範例~
謝謝 :)
a910937
可愛的小學生
可愛的小學生
 
文章: 13
註冊時間: 週二 9月 09, 2008 3:05 pm

文章ernestkidd » 週三 10月 15, 2008 11:25 am

講講我的經驗
希望對你有幫助

我的環境
s3c2410 + linux2.6.1x

自己寫了對 s3c2410 的 uart 驅動程式(uart.ko)去掛載
insmod uart.ko
mknod /dev/uart c $major 0

然後自己另外再寫一個 c 去開啟裝置
fd = open( /dev/uart, O_RDWR );

使用 read() 和 write() 去做溝通
char c[]; int n;
r = read( fd, c, n );
r = write( fd, c, n );

至於 uart.ko 這個東西是看 s3c2410 規格書 ch11.uart 去寫的

所以當我要使用 uart 傳送時
會變成這樣

掛載 uart 的驅動程式
> run_uart1.sh <ENTER>

使用編譯好有用 read() 的執行檔去讀取 N 個 byte
> uart_rx N <ENTER>

使用編譯好有用 write() 的執行檔去寫出 N 個 byte
> uart_tx 0xff 0xff 0xff 0xff <ENTER> // 這邊是送出四個

對了
我使用的 s3c2410 的版子沒有接出 uart1 和 uart2
還得自己對 pin 腳焊線接出來...

如果要程式原始碼的話
http://www.wretch.cc/blog/ernestkidd/11530653
ernestkidd
可愛的小學生
可愛的小學生
 
文章: 11
註冊時間: 週一 12月 24, 2007 10:31 am

文章a910937 » 週二 10月 28, 2008 5:53 pm

謝謝大家的回答^_^
我也各寫了tx rx 的程式去接收和讀取 ;-) 果然是接頭問題= =
不知道您有沒有研究過 從UART傳輸大量封包的經驗~~?
之前我有試過從 tx端 傳無線迴圈的字串給rx端
rx端那邊會漏掉字串內容(這是遺失吧..= =")
不知道有沒有先進們有沒有試過 從UART傳輸MP3檔案的經驗 :-o
可以一起討論看看 :mrgreen:
a910937
可愛的小學生
可愛的小學生
 
文章: 13
註冊時間: 週二 9月 09, 2008 3:05 pm

文章訪客 » 週三 10月 29, 2008 12:18 am

嗯嗯~常常掉一兩個byte吧 = =
弄個checksum吧

3mb的mp3應該buffer也要分不少次傳輸
每傳一次就check一次
這樣就不用傳完了
check不過還要重新傳輸3mb
訪客
 

文章a910937 » 週三 10月 29, 2008 2:56 pm

Hmm...我是有想過使用checksum
但是還不知道要怎麼下手...
我貼出我的ARM 接收端使用的rx程式(tx就只是傳輸一組字串的程式..)
可是我拿去使用 會發生字串遺失,不知道有沒有先進們可以給點意見^^
謝謝~:mrgreen:
RX端:

int main()
{
int fd;
int nByte=0;
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);
}
如果事一直接收TX資料進來,好像封包會遺失...checksum要怎麼使用會比較好呢 :-? 煩悶~想傳輸Mp3檔 感覺好困難.... :(

最近有想過用xmodem的code做修改 有高手修改過xmodem的code嗎^^??
最後由 a910937 於 週四 10月 30, 2008 5:25 pm 編輯,總共編輯了 1 次。
a910937
可愛的小學生
可愛的小學生
 
文章: 13
註冊時間: 週二 9月 09, 2008 3:05 pm

文章訪客 » 週三 10月 29, 2008 6:31 pm

可以試看看用md5
訪客
 

文章訪客 » 週三 10月 29, 2008 6:46 pm

我的作法是把第一個BYTE XOR 第二個BYTE XOR 第三個BYTE 一直做到BUFFER的結尾得出來的值加在BUFFER的最後面
訪客
 

文章ssc » 週五 10月 31, 2008 6:23 pm

a910937 寫:Hmm...我是有想過使用checksum
但是還不知道要怎麼下手...
我貼出我的ARM 接收端使用的rx程式(tx就只是傳輸一組字串的程式..)
可是我拿去使用 會發生字串遺失,不知道有沒有先進們可以給點意見^^


我的想法是要是TX 和 RX 的程式都是妳自己要寫的話。可以用像hand-shake 的方法。
例如 把 3MB 的檔案拆成數份,以256 或是 512 bytes 看你覺得那樣比較穩,不會漏。 每傳一份後,就算個 checksum,如果checksum 符合,就通知對方可以再送下一筆。直到結束。

希望對你有幫助。
ssc
可愛的小學生
可愛的小學生
 
文章: 12
註冊時間: 週四 8月 21, 2008 5:44 pm

文章a910937 » 週一 11月 03, 2008 10:48 am

恩~我最近有去翻閱rs232相關書籍
上面寫說 傳輸資料進來的速度太快會發生的錯誤
我在想可能buffer進來太多 rx爆掉了!
所以說 可以用checksum 試試看是嗎~?

還是可以看XMODEM 的交握協定 去做RX端修改..

請問有大大能提供checksum的程式寫法嗎~~
我搜尋不到我想要的....@@"
:shock: :shock: 3Q~~~~
a910937
可愛的小學生
可愛的小學生
 
文章: 13
註冊時間: 週二 9月 09, 2008 3:05 pm

文章ssc » 週一 11月 03, 2008 5:40 pm

a910937 寫:恩~我最近有去翻閱rs232相關書籍
上面寫說 傳輸資料進來的速度太快會發生的錯誤
我在想可能buffer進來太多 rx爆掉了!


你用的 baud rate 是多少? 常用的是9600 或是 115200。

a910937 寫:請問有大大能提供checksum的程式寫法嗎


最簡單的就是把你要傳的東西全部加起來,放在最後,就是可以用的checksum了。
例如要傳 buf[4]={1,2,3};
你可以把 buf[3] = buf[0]+buf[1]+buf[2];

要是你怕這樣的重複率太高,你也可以用其他網友說的md5或是 CRC32或CRC16。 這些在google上都可以找到sample code。

希望對你有幫助。
ssc
可愛的小學生
可愛的小學生
 
文章: 12
註冊時間: 週四 8月 21, 2008 5:44 pm

文章Dream » 週二 11月 04, 2008 1:04 pm

請問有試過打開硬體流量控制功能(CTS/RTS)嗎?
Dream
可愛的小學生
可愛的小學生
 
文章: 17
註冊時間: 週三 1月 28, 2004 2:12 am
來自: 台北

文章a910937 » 週二 11月 04, 2008 4:21 pm

ssc 寫:
a910937 寫:恩~我最近有去翻閱rs232相關書籍
上面寫說 傳輸資料進來的速度太快會發生的錯誤
我在想可能buffer進來太多 rx爆掉了!


你用的 baud rate 是多少? 常用的是9600 或是 115200。




a910937 寫:請問有大大能提供checksum的程式寫法嗎


最簡單的就是把你要傳的東西全部加起來,放在最後,就是可以用的checksum了。
例如要傳 buf[4]={1,2,3};
你可以把 buf[3] = buf[0]+buf[1]+buf[2];

要是你怕這樣的重複率太高,你也可以用其他網友說的md5或是 CRC32或CRC16。 這些在google上都可以找到sample code。

希望對你有幫助。



謝謝大哥~~~我會去找找看資料的~ 8-)
我兩個ARM板ttyS1 baudrate都是38400~
a910937
可愛的小學生
可愛的小學生
 
文章: 13
註冊時間: 週二 9月 09, 2008 3:05 pm

文章a910937 » 週二 11月 04, 2008 4:23 pm

Dream 寫:請問有試過打開硬體流量控制功能(CTS/RTS)嗎?


請問那個是。。。在終端機設定的功能嗎?
我沒試過呢~ :-o
a910937
可愛的小學生
可愛的小學生
 
文章: 13
註冊時間: 週二 9月 09, 2008 3:05 pm

下一頁

回到 embedded system

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客