NUC442可以做USB转12个UART ,每个115200全负荷吗?
Smart Card Host Interface (SC) 可以用作UART模式,但是只有4个byte FIFO,那样效率很低阿。NUC442可以支持做USB转12个UART ,每个到115200全负荷吗? 没有DMA?
USB FS是12M 协议和程序的损失算50% 估计能有6M实际带宽 分给12个UART 一个能有500K的带宽 应付115,2k 应该没问题 我想问声RAM够用吗? usb这边不担心。问题就算使用DMA,总共16个通道,USB收发使用两个,串口如果每个使用仅7个收发。 SC 的FIFO 4 byte 使用中断模式,肯定不行 好奇地问一下,什么地方需要那么多串口? 串口服务器用 USB这边如果要用CDC的话,端点数不够用。 想问下,串口服务器为什么不是总线形式?每台客户机要单独一个串口?小弟不懂,高手请指教。 我们讨论的是产品实现问题,不是为产品要这么用 8个收发端点,扣掉控制端点,最多也就只能做7个吧。 不要在USB上做多个endpoint,软件需要重新处理,不直接CDC映射。需要考虑的仅仅是12个串口本身的同时并发处理。 从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: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 还有多少串口可用啊~ 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的速度。。。 感觉中断的频率超过10KHZ,系统就难处理好了。SC的6个串口在高比特率下不太可行,可以采取的方法使用定时中断,5KHZ左右的间隔去读FIFO可能实际一点。 最槽糕的情况是12个同时工作,如何处理?
估计够呛。
bbs2009 发表于 2015-8-9 18:13
从USB方面看, 12M的USB假设能到达700K纯数据速度..
------------------------------------------------- ...
USB是必须大块传输才能高速。 已经算过12个串口双向同时传最大200多K字节。USB部分采用定时收发方式。比如2MS一次,既能攒够大包又能实时。USB部分是肯定没问题的。 问题还是在密集的串口中断处理吧。 如果用CDC协议,这么点端点是完全不够的。每个端口至少要2个端点。 bbs2009 发表于 2015-8-13 09:52
USB是必须大块传输才能高速。。。USB部分采用定时收发方式,2MS一次
-------------------------------- ...
USB的查询间隔时USB主控制器决定的
这个值会根据描述符来设定,基本不用pc软件参与
实际上这个应用的瓶颈不在USB速度上
而在串口上,而如果每个串口都有fifo之类的东西,会简单一些
很有可能是部分有部分没有 bbs2009 发表于 2015-8-13 10:16
要2 ms 定时传输只能用 中断传输了。
同步传输也可以
就是没了校验和重发机制 bbs2009 发表于 2015-8-13 09:52
USB是必须大块传输才能高速。。。USB部分采用定时收发方式,2MS一次
-------------------------------- ...
确实,问题转移到PC定时读写了。包大小没问题的,问题在保证间隔。中断传输最大64字节速度是不够的,同步传输怕丢,只能用批量传输。将USB间隔拉太长能攒大包能降低PC定时器间隔但会影响实时性了。 如果PC专用只干这个事,优先级最高,应该是可以的。就像平时测试USB转串口,别的软件都不用,就串口助手几百K字节速度一口气不停歇的跑几个小时。 文员妹纸电脑边看电视剧边跑数据,或者攻城狮边编译软件画图边后台跑数据肯定不能保证实时性了。 压力转移到电脑程序猿身上。。。 NUC442并没有12个串口吧 这个要求有点高,如果有流量控制还好实现些。 这个如果做传统的USB到串口的,也就是在电脑上看到的是一个一个的串口的话,基本不可能,CDC类需要一个配置端点,一个收发端点(设置串口参数用),也就是两个,一般MCU不会做到二三十个端点的吧话说,
如果按STM32F1来看的话,最多3个就完了,1+2×3 = 7端点
当然如果单独重写驱动还是有可能的,通过虚拟若干串口,然后再到你的设备,技术上是没有问题的,不过那样我觉得选择以太网的方式更稳当。
页:
[1]