启用该 feature
UART 会话基于 Socket.IO,因此它位于一个 cargo feature 之后:uart feature 隐含启用 blocking。它没有异步版本。
句柄
uart() 是唯一返回 Result 的句柄构造方法。其他每个 Net 句柄在您调用方法之前都是静止的,而 uart() 会连接会话并立即开始流式传输,因此它在这一步就可能失败。方法
方法参考
read(timeout: Duration) -> Result<Vec<u8>>
在 timeout 时间内到达的字节。该调用可能返回空 vector。
设备空闲时,
read() 会把整个超时时间等满。在轮询循环里请用 try_read(),否则每一轮迭代都要花掉整个超时时长。try_read() -> Result<Vec<u8>>
已经收到的字节,不等待。
wait_for(needle: &[u8], timeout: Duration) -> Result<Vec<u8>>
一直累积,直到出现 needle。
返回: 直到该标记为止、并且包含该标记的全部内容;剩余部分继续留在缓冲区里。空标记会立即返回;没找到则是 Error::Timeout。
write(data: &[u8]) -> Result<()> 和 write_str(s: &str) -> Result<()>
向设备写入。
last_status() -> Option<&str>
最近一次会话状态通知,在读取过程中更新。当一个 USB 串口适配器正在重新枚举时 —— 因为某个集线器端口被断电重启,或者被测设备被重新烧录 —— 它读到的是 "reconnecting",然后是 "reconnected"。检查它可以区分”被测设备很安静”和”适配器不见了”。
stop() -> Result<()>
干净地停止,并关闭 Box 上的该端口。它会消耗掉该会话。把会话 drop 掉同样会停止它,但 stop() 会把错误暴露出来。
示例
等待启动横幅,然后驱动控制台
在重新烧录过程中保住会话
受支持的硬件
说明
- Box 独占该端口,并且每个 Net 或设备只允许一个会话。 第二个打开者会得到
Error::Stream,说明该端口已被占用。这也包括您自己上一个测试泄漏下来的会话 —— 请调用stop()。 - 连接确认的超时是 15 秒;超过它是
Error::Timeout。 - 字节是原始的。没有行规程、不处理回显、也不做编码转换;
wait_for是按字节工作的。 - 会话会在 Socket.IO 握手时带上网关 bearer 令牌,因此受网关保护的 Box 无需额外配置。
- 在 FTDI 多通道芯片上,UART 四个通道都能用,这与只限于通道 A 和 B 的 MPSSE 协议(debug、spi、i2c)不同。在单通道的 FT232H 上,占用 UART 会让 MPSSE 类角色不可用,反之亦然。

