作者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