作者dexders (滋參攻城屍)
看板ASM
標題[問題] unbuffered UART 收資料速度
時間Sun Jul 29 17:08:28 2012
最近在用cypress的MCU做EVK 要把target傳來的UART字串用USB送到PC上
可是遇到一個瓶頸
cy68013a的 UART似乎沒有buffer
一旦遇上一長串的資料進來的時候 很容易就掉東掉西的
現在已經是用interrupt的方式在操作UART 權限也設到最高
還是沒辦法解決 不知道版上各位有何想法?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.0.102.88
1F:→ MasterChang:queue 07/29 17:09
2F:→ dexders:現在是開一個128byte的陣列 當收到\n或\r之後全部丟到usb 07/29 17:12
3F:→ dexders:endpoint去傳輸 這邊不用firmware控制 但就是來不及塞... 07/29 17:12
4F:→ MasterChang:你程式規劃有問題,UART是超慢設備了.... 07/29 17:28
5F:→ dexders:RI進來就塞一次buffer 塞到滿或是符合條件送出 這樣應該好 07/29 17:34
6F:→ dexders:吧? 這困擾我很久了 07/29 17:34
7F:→ dexders:也不能用while(1)來收 會卡住其他東西 07/29 17:36
8F:推 WolfLord:我用pic18F24k50的作法是用ring buffer,不管他是不是 07/29 18:16
9F:→ WolfLord:end of line,只要mcu有空buf有字就丟。累積太多字丟usb 07/29 18:17
10F:→ WolfLord:有時候在115200以上速度丟一連串字UART會發生OVERSPEED 07/29 18:18
11F:→ WolfLord:因為PC處理USB的時間也是批次批次的,好像一秒才二十幾次 07/29 18:20
12F:→ WolfLord:(感覺上,與技術規格無關)﹍ 07/29 18:20
13F:→ dexders:我虛擬出來的virtual comport大概是10ms掃一次 一次傳1k 07/29 18:26
14F:→ dexders:byte沒問題 fx2lp的USB不需要太多firmware控制 07/29 18:28
15F:→ dexders:現在想到一個問題 MCU是用3.3v target 2.8v 這樣會有關係? 07/29 18:28
16F:→ dexders:重複送同一個字串 有時候很完整 有時候會掉10byte以上.... 07/29 18:29
17F:推 WolfLord:CPU端pull一根4k7看看吧 07/29 18:39
18F:推 ksmrt0123:收到一串資料後, 要等這串資料用USB傳回PC才能再開始收 07/30 09:13
19F:→ ksmrt0123:uart資料對不對? 對的話你需要 double buffering 07/30 09:13
20F:→ ksmrt0123:CY7C68013A的51是4T又可跑到48MHz算蠻快的了 07/30 09:15
21F:→ dexders:封包(n-1)的stop bit跟封包(n)的start bit只隔了1uS... 07/31 23:20
22F:→ dexders:68013A跟得上嗎? 07/31 23:20
23F:→ ksmrt0123:MCU的反應時間不是1uS而是10 bit time, 9600baud有1mS 08/01 09:12
24F:→ ksmrt0123:跟不跟得上要看你在這段時間中要完成多少事 08/01 09:13
25F:→ dexders:我速度是用57600 UART是採用interrupt方式 現在只要收到一 08/01 21:45
26F:→ dexders:個byte就塞進enpoint buffer裡面然後arm endpoint 漏掉的 08/01 21:46
27F:→ dexders:資料比之前少 但是還是會有遺漏 可能是因為 arm endpoint 08/01 21:46
28F:→ dexders:需要SYNCDELAY吧...... 目前還找不到辦法 08/01 21:47