tgyd 发表于 2015-8-7 08:59:03

NUC442可以做USB转12个UART ,每个115200全负荷吗?


Smart Card Host Interface (SC) 可以用作UART模式,但是只有4个byte FIFO,那样效率很低阿。NUC442可以支持做USB转12个UART ,每个到115200全负荷吗?

y595906642 发表于 2015-8-7 09:54:50

没有DMA?
USB FS是12M 协议和程序的损失算50% 估计能有6M实际带宽 分给12个UART 一个能有500K的带宽 应付115,2k 应该没问题

ersha4877 发表于 2015-8-7 10:26:37

我想问声RAM够用吗?

tgyd 发表于 2015-8-7 11:06:28

usb这边不担心。问题就算使用DMA,总共16个通道,USB收发使用两个,串口如果每个使用仅7个收发。

tgyd 发表于 2015-8-7 11:07:35

SC 的FIFO 4 byte 使用中断模式,肯定不行

codefish 发表于 2015-8-7 13:10:29

好奇地问一下,什么地方需要那么多串口?

tgyd 发表于 2015-8-7 13:31:20

串口服务器用

caixiuwen 发表于 2015-8-7 13:34:42

USB这边如果要用CDC的话,端点数不够用。

laujc 发表于 2015-8-7 14:40:08

想问下,串口服务器为什么不是总线形式?每台客户机要单独一个串口?小弟不懂,高手请指教。

tgyd 发表于 2015-8-7 14:43:55

我们讨论的是产品实现问题,不是为产品要这么用

xwkm 发表于 2015-8-7 19:15:18

8个收发端点,扣掉控制端点,最多也就只能做7个吧。

tgyd 发表于 2015-8-8 13:21:41

不要在USB上做多个endpoint,软件需要重新处理,不直接CDC映射。需要考虑的仅仅是12个串口本身的同时并发处理。

huangqi412 发表于 2015-8-8 15:45:16

从USB方面看, 12M的USB假设能到达700K纯数据速度,这应该是能达到的。每个串口115200 ,而且双向,极限就是115200*12*2/10=276.480K字节,实际没这么多,速度是USB速度的1/3。如果用同一个端点传输,要提高USB速度要汇集所有串口的数据一起传输,不然每个串口分帧传输肯定效率低了,所以要对数据聚合和拆分,就算上DMA也要做软件数据处理。从串口方面看, 哪款单片机DMA也不太可能有这么多路,数据量大的几个串口通道用DMA处理,剩下的一大半通道数据量少只能用中断处理了。 串口模块不知道有几字节FIFO,每个字节间隔是1/11520=86us,FIFO可以延长好几倍打断时间。如果串口模块都是带好几字节FIFO的,单片机速度又非常非常快(这片子是M4?),实际运行也应该不会所有通道负荷同升同降,估计能抗住不溢出。      12个串口分主通道和次通道,实际不会接近满负荷运行,而且各通道不会同时升降负荷的话应该基本够。不然肯定是没戏的。         如果通道都一样,负荷也同升同降的应用,估计会是一带多的主从了,实际通信内容近似,那可以通过非通用软件实现了。

tomyqg 发表于 2015-8-8 17:31:05

本帖最后由 tomyqg 于 2015-8-8 17:34 编辑

6个scuart(收发各4字节FIFO) + 6个uart Separate receive / transmit 64/16 bytes (UART0/UART1~5) entry FIFO for data payloads ,还支持EBI,这货是为串口服务器而生么~ 不知道144脚的外扩SRAM (NUC472) + EMAC 还有多少串口可用啊~

caixiuwen 发表于 2015-8-8 19:32:40

tgyd 发表于 2015-8-8 13:21
不要在USB上做多个endpoint,软件需要重新处理,不直接CDC映射。需要考虑的仅仅是12个串口本身的同时并发处 ...

12个串口并发对于CortexM应该没什么问题吧。就算一个字节一个中断,每个串口通信速度20KB/s,那么一秒要 20,000 × 2(双向)× 12 = 480,000 个中断,假设一次中断要100个周期,也就48MHz的CPU时间,还有很多CPU资源可用。
实际优化的中断处理程序应该可以不用100个周期。。。115200/10也才11,520 B/s的速度。。。

bbs2009 发表于 2015-8-9 18:13:45

tgyd 发表于 2015-8-10 10:04:26

感觉中断的频率超过10KHZ,系统就难处理好了。SC的6个串口在高比特率下不太可行,可以采取的方法使用定时中断,5KHZ左右的间隔去读FIFO可能实际一点。

Excellence 发表于 2015-8-10 10:19:27

最槽糕的情况是12个同时工作,如何处理?
估计够呛。

huangqi412 发表于 2015-8-10 10:33:06

bbs2009 发表于 2015-8-9 18:13
从USB方面看, 12M的USB假设能到达700K纯数据速度..
------------------------------------------------- ...

USB是必须大块传输才能高速。   已经算过12个串口双向同时传最大200多K字节。USB部分采用定时收发方式。比如2MS一次,既能攒够大包又能实时。USB部分是肯定没问题的。    问题还是在密集的串口中断处理吧。

xwkm 发表于 2015-8-11 07:47:22

如果用CDC协议,这么点端点是完全不够的。每个端口至少要2个端点。

bbs2009 发表于 2015-8-13 09:28:35

bbs2009 发表于 2015-8-13 09:52:05

bbs2009 发表于 2015-8-13 10:16:16

canspider 发表于 2015-8-13 10:19:59

bbs2009 发表于 2015-8-13 09:52
USB是必须大块传输才能高速。。。USB部分采用定时收发方式,2MS一次
-------------------------------- ...

USB的查询间隔时USB主控制器决定的
这个值会根据描述符来设定,基本不用pc软件参与
实际上这个应用的瓶颈不在USB速度上
而在串口上,而如果每个串口都有fifo之类的东西,会简单一些
很有可能是部分有部分没有

canspider 发表于 2015-8-13 10:21:02

bbs2009 发表于 2015-8-13 10:16
要2 ms 定时传输只能用 中断传输了。

同步传输也可以
就是没了校验和重发机制

huangqi412 发表于 2015-8-13 11:00:02

bbs2009 发表于 2015-8-13 09:52
USB是必须大块传输才能高速。。。USB部分采用定时收发方式,2MS一次
-------------------------------- ...

确实,问题转移到PC定时读写了。包大小没问题的,问题在保证间隔。中断传输最大64字节速度是不够的,同步传输怕丢,只能用批量传输。将USB间隔拉太长能攒大包能降低PC定时器间隔但会影响实时性了。   如果PC专用只干这个事,优先级最高,应该是可以的。就像平时测试USB转串口,别的软件都不用,就串口助手几百K字节速度一口气不停歇的跑几个小时。 文员妹纸电脑边看电视剧边跑数据,或者攻城狮边编译软件画图边后台跑数据肯定不能保证实时性了。

huangqi412 发表于 2015-8-13 11:01:09

压力转移到电脑程序猿身上。。。

bbs2009 发表于 2015-8-13 14:50:14

阿豪博士 发表于 2015-8-14 17:52:49

NUC442并没有12个串口吧

liudan 发表于 2015-9-2 14:30:40

这个要求有点高,如果有流量控制还好实现些。

huxiaoping 发表于 2015-10-2 14:56:47

这个如果做传统的USB到串口的,也就是在电脑上看到的是一个一个的串口的话,基本不可能,CDC类需要一个配置端点,一个收发端点(设置串口参数用),也就是两个,一般MCU不会做到二三十个端点的吧话说,

如果按STM32F1来看的话,最多3个就完了,1+2×3 = 7端点

当然如果单独重写驱动还是有可能的,通过虚拟若干串口,然后再到你的设备,技术上是没有问题的,不过那样我觉得选择以太网的方式更稳当。
页: [1]
查看完整版本: NUC442可以做USB转12个UART ,每个115200全负荷吗?