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