在为不同的项目编写几个不同的自定义串行协议之后,我开始对重新发明轮子感到沮丧。 为了继续为每个项目开发定制的解决scheme,我一直在寻找更通用的解决scheme。 我想知道是否有人知道满足以下要求的串行协议(或更好的实现): 支持多种设备。 我们希望能够支持一个RS485总线。 保证交付。 某种确认机制,以及一些简单的错误检测(CRC16可能是好的)。 不是主/从。 理想情况下,从机可以asynchronous发送数据。 这主要是出于美学的原因,投票每个奴隶的概念不适合我。 OS独立性。 理想情况下,它不会依赖于抢先式的多任务处理环境。 我愿意承认这一点,如果我能得到其他的东西。 ANSI C我们需要能够编译几个不同的体系结构。 速度不是太大的问题,我们愿意放弃一些速度,以满足其他一些需求。 但是,我们希望尽量减less所需资源的数量。 我即将开始实施滑动窗口协议与piggybacked ACK并没有select性的重复,但认为也许有人可以救我这个麻烦。 有谁知道现有的项目,我可以利用? 或者更好的策略? UPDATE 我认真考虑过一个TCP / IP的实现,但真的希望有更轻量级的东西。 TCP / IP的许多function对于我正在尝试做的事情来说都是过度的。 我愿意接受(勉强),也许我想要的function不包括在较轻的协议中。 更新2 感谢CAN上的提示。 我曾经看过,未来可能会用到它。 我真的很喜欢图书馆处理确认,缓冲,重试等。 我想我更多的是寻找一个networking/传输层,而不是数据链/物理层。 更新3 所以这听起来像这个领域的艺术状态是: 裁减的TCP / IP堆栈。 可能从诸如lwIP或uIP之类的东西开始。 一个基于CAN的实现,它可能很大程度上依赖于CAN总线,所以它在其他物理层上将不会有用。 CAN节日可以帮助你。 一个HDLC或SDLC实现(就像这个一样)。 这可能是我们要采取的路线。 如果您遇到此问题,请随时发布更多的答案。
我有一个蓝牙手持打印机,可以使用我的Mac(使用Coolterm)使用SPP连接进行通信。 当我试图从Android(使用平台7)做同样的事情时,我遇到了很多问题: 打印机似乎不支持/需要PIN身份validation。 当从OSX进行连接时,我只是select了“不使用引脚”的选项并将其配对。 在Android中,当我使用device.createRfcommSocketToServiceRecord() ,它总是要求我input一个PIN / Key(我没有/需要)。 我使用reflection技巧解决了这个问题: Method m = device.getClass().getMethod("createInsecureRfcommSocket", new Class[] {int.class}); BluetoothSocket connection = (BluetoothSocket) m.invoke(device, 1); 我不确定这是否真正起作用,但是打印机上的闪烁LED不再闪烁,这使我相信这样做。 一旦我有套接字,我尝试写字节数据的stream使用: byte[] buffer = new byte[3]; buffer[0] = (byte) 0x8A; buffer[1] = (byte) 0xC1; buffer[2] = (byte) 0x04; outStream.write(buffer); int response = inStream.read(); mySocket.close(); 在OSX上从Coolterm发送相同的三字节序列从打印机打印testing页。 但是,这似乎使线程挂在Android(读)。 有什么我在这里错过吗? 编辑:这似乎只有当我把通道设置为1。所以这意味着我在这里的东西。
在Windows中,我可以使用以下命令与串口设备进行通信: mode com1: baud=9600 data=8 parity=n stop=1 copy con com1 alt+18alt+2ctrl+z 设备启动请求的操作。 当我试图从一个独立的debian盒子或从同一个windows机器的debian virtualbox实例完成相同的操作时,我到目前为止没有运气。 这里是相当的Linux命令(至less我是这么认为的) stty -F /dev/ttyS0 speed 9600 cs8 -cstopb -parenb echo '\x12\x02' > /dev/ttyS0 什么都没发生。 有人可以指导我正确的方向吗?
在将RXTX用于许多不同的项目之后,我遇到了很多令人讨厌的差异和问题,这些问题只能被明显地归结为库中的错误 – 防止RXTX库中的死锁,竞赛危险和监视器线程被打开, (即使我使用的所有端口已经closures了!)运行最新的“unstable”版本已经有所帮助了,但离我称之为可靠的地方还有很远的距离,并且项目的活动似乎还很低现在。 但是,寻找RXTX的免费跨平台替代品似乎并没有多less其他function。 有没有人试过更多运气的图书馆? 我不需要并行端口支持,只需串行,并且不一定要与RXTX或javax.comm API兼容。
我有一些遗留代码,通过调用EnumPorts()函数,然后筛选以“COM”开头的端口名称,提供PC上可用COM端口的列表。 出于testing的目的,如果我可以使用com0com这样的代码来提供这些代码,它将提供成对的虚拟COM端口作为一个空调制解调器。 但是,EnumPorts EnumPorts()函数找不到com0com端口(即使没有过滤“COM”)。 超级terminal和SysInternals PortMon都可以看到他们,所以我确定它安装正确。 那么还有其他一些Win32函数提供了可用的串行端口的权威列表吗?
我正在尝试将minicom连接到通过USB连接到串行适配器的串行设备。 这是一个PL2303,从我读过的一切,不需要额外的驱动程序。 该器件被识别为PL2303。 我是minicom的初学者。 这是执行正确的命令吗? 还是我需要configuration一些东西? $ sudo minicom –device /dev/ttyUSB0 minicom: cannot open /dev/ttyUSB0: No such file or directory $ sudo lsusb -v Bus 002 Device 006: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port Device Descriptor: bLength 18 bDescriptorType 1 $ tail /var/log/syslog #then removed and attached the device. Mar 13 23:31:49 ubuntu […]
DTR / DSR和RTS / CTS硬件stream量控制有什么区别? 每个人在什么时候使用? 为什么我们需要不止一种硬件stream量控制? 🙂
我需要在Linux上testing一个串口应用程序,但是我的testing机只有一个串口。 有没有办法将虚拟串行端口添加到Linux并通过shell或脚本模拟设备来testing我的应用程序? 注意:我无法重新映射端口,它在ttys2上硬编码,我需要testing应用程序。
友好名称=在“设备pipe理器”(Ports(COM&LPT))下出现的名称。 编辑:下面提供了两个解决scheme。 一个与WMI和另一个与SetupAPI。
我刚开始学习如何通过C#GUI从我的硬件发送和接收数据。 任何人都可以写一个详细的如何从串口读取数据?