请问USB转串口方案中,哪一种适合用于USB->串口->LIN?
小弟汽车电子行业。由于经常要和LIN通信打交道,LIN在物理层上与串口不同,但是在通信层上与UART是一致的。
但是LIN有一个帧起始和一个同步机制。就是先发送一个宽度大于11比特的逻辑0(低电平),延迟一个很小的时间之后再发送一个同步场0x55,然后才是应用层的报文。
于是,公司使用一个MAX232芯片将电脑串口的RS232转成TTL电平的UART通信,然后用该TTL电平驱动LIN收发器。
上位机的调试软件,支持“break”指令(用来产生上述的11比特逻辑0),使用起来很好。
问题来了,原生态的串口使用起来很好。上述“很小的时间”足够小也,小于400uS。问题在于公司笔记本神马的,没有原生的台式机串品了,都是USB转出来的。
相比之下,CP210X方案是稳定性很好的芯片了,大部分都是用这种。转出来之后,这个“很小的时间”变成不确定时间了。一小半的机率很小于400uS,大半的机率会大于400uS,而且对于不同的笔记本不同的操作系统,这个时间还不一样!
这样导致了一些要求严格的LIN芯片与之对接时,会因为这个“很小的时间”超过400uS而导致通信失败。
目前公司大面积使用这种方案。总理就汇总到我这里了。我需要找一个更稳定的,这个时间很小的方案来做一个USB转LIN。
最简单的就是找一个符合上述时间要求的芯片。但是貌似操作系统版本越高,这个时间越不可控。我感觉做操作系统软件的对驱动这些硬件没概念,对性能和严谨性欠考虑。当然,只有很少的用户才会使用braek这个功能估计。也只有很少的人碰到了对这个时间要求严格的芯片,所以对桥接芯片厂家来说,不以为然。他们一般发送标准的16进制字节流没有问题就不会再考究这些事情了。
我试过力特的USB转232线,一样的问题。据说这家用的是FT232的方案。那我无语了。
另外就是我想用STM32的HID USB来和电脑对接,虚拟串口,但是我不大知道USB的这些概念,更不知道他的USB库里有没有“break”这个功能呢。很可能也没有。
如果STM32接收到PC发过来的“break”指令,我倒是可以自主地控制这个时间了。肯定能控制到400uS以内就把0x55发送出去。可是没有一套思路,概念不清晰。
请大侠支招!!
用stm32的usb 跑usb-cdc类,stm32与电脑使用USB协议通信,stm32串口输出的数据以及时序随便你定义,完全可满足。 上位机如何发送break呢?是不是可以自定义一个转义字符。比如两个字节组合?另外,上位机用安装驱动么? 记得stm32是有虚拟串口驱动的,我想要是能做成免驱动的就酷了。 自己做转接器就太容易解决这个问题了hid自定义命令免驱
如果通用芯片忘记lin总线细节了 如果55后面时间要求不严应该可以通过九线串口加逻辑电路实现 用控制线干涉发射 本来就是用9线串口实现的,只不过是break和0x55的延迟来自于USB转串口。这个延迟受USB转串口方案及其驱动程序版本的影响。
页:
[1]