#nrf52 #framing #serde #nordic #cobs #serial-port #send-receive

no-std nrf52-bin-logger

nRF52的UARTE日志的二进制协议

6个版本 (3个重大变更)

0.4.0 2019年10月29日
0.3.0 2019年4月22日
0.2.1 2019年4月17日
0.1.1 2019年4月13日

#1397 in 嵌入式开发

每月26次下载

MIT/Apache

24KB
346 代码行

nrf52-bin-logger

nRF52的UARTE日志的二进制协议

目前仅支持nrf52832。

最终我可能只是将这个crate做成一个embedded-hal crate。哎呀。

许可证

许可方式为以下之一

由您选择。

贡献

除非您明确说明,否则您提交给作品以供包含的任何贡献,根据Apache-2.0许可证的定义,将根据上述方式双许可,不附加任何额外条款或条件。


lib.rs:

nrf52-bin-logger

这是一个方便地将nRF52 UART从以字节流为接口转换为以“Rust Struct”为焦点接口的方法。用户可以决定是否要在串行端口上发送、接收或两者都做。

消息使用postcard + serde进行序列化和反序列化,所有消息都使用COBS编码进行帧定界。这可以用于快速在nRF52的串行端口上设置单工或双工通信协议。

use serde::{Serialize, Deserialize};
use heapless::consts::*;
use nrf52_bin_logger::{Logger, senders::RealSender, receivers::RealReceiver};

#[derive(Serialize, Deserialize)]
enum MyProtocol {
    MsgA(u32),
    MsgB(f32),
    MsgC(bool),
}

type ModemLogger = Logger<
    // `MyProtocol` outgoing messages, 16 bytes used as a serialization buffer
    RealSender<MyProtocol, U16>,
    // `MyProtocol` incoming messages, 16 bytes used as a deserialization buffer,
    // a max of 8 `MyProtocol` messages can be enqueued
    RealReceiver<MyProtocol, U16, U8>,
>;

不需要发送者或接收者?只需替换类型为NullSender/NullReceiver。将不会为此接口的一半生成任何代码。

use serde::{Serialize, Deserialize};
use heapless::consts::*;
use nrf52_bin_logger::{Logger, senders::RealSender, receivers::NullReceiver};

#[derive(Serialize, Deserialize)]
enum MyProtocol {
    MsgA(u32),
    MsgB(f32),
    MsgC(bool),
}

type ModemLogger = Logger<
    // `MyProtocol` outgoing messages, 16 bytes used as a serialization buffer
    RealSender<MyProtocol, U16>,
    // Nothing will be received
    NullReceiver,
>;

依赖项

~8MB
~208K SLoC