# SimpleCDBUS **Repository Path**: undefined-innovation/simple-cdbus ## Basic Information - **Project Name**: SimpleCDBUS - **Description**: SimpleCDBUS,CDBUS与CDNET的Arduino封装,使用Arduino轻松开发CDBUS - **Primary Language**: Unknown - **License**: MPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2025-09-13 - **Last Updated**: 2025-10-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SimpleCDBUS Arduino库 一个全面的Arduino库,用于CDBUS(控制器分布式总线)和CDNET协议实现,为分布式系统提供可靠的串行通信。现已支持具有SPI接口和硬件加速功能的高级CDCTL01A芯片。 ## 特性 - **CDBUS协议支持**:完整实现具有硬件仲裁功能的CDBUS协议 - **CDNET协议层**:构建在CDBUS之上的高级网络协议 - **CDCTL01A支持**:具有DMA和硬件CRC的高级基于SPI的CDBUS控制器 - **Arduino友好**:易于使用的Arduino风格API - **多平台**:兼容各种Arduino板和STM32 - **可靠通信**:内置错误检测和处理 - **高性能**:使用CDCTL01A芯片时最高可达10Mbps ## 安装 ### Arduino IDE 1. 从GitHub下载最新版本 2. 在Arduino IDE中,进入`项目 > 加载库 > 添加.ZIP库` 3. 选择下载的ZIP文件 ### PlatformIO 添加到您的`platformio.ini`: ```ini lib_deps = SimpleCDBUS ``` ## 快速开始 ### 基本CDBUS用法 ```cpp #include SimpleCDBUS cdbus; void setup() { Serial.begin(115200); cdbus.begin(&Serial1, 0x01); // 使用Serial1,设备地址0x01 } void loop() { // 发送数据 uint8_t data[] = {0x01, 0x02, 0x03}; cdbus.send(0x02, data, sizeof(data)); // 接收数据 if (cdbus.available()) { uint8_t src, len; uint8_t buffer[64]; len = cdbus.read(&src, buffer, sizeof(buffer)); // 处理接收到的数据 } } ``` ### CDNET协议用法 ```cpp #include SimpleCDNET cdnet; void setup() { Serial.begin(115200); cdnet.begin(&Serial1, 0x01); } void loop() { // 发送CDNET数据包 uint8_t data[] = {0xAA, 0xBB}; cdnet.sendL0(0x02, 0x10, data, sizeof(data)); // 接收CDNET数据包 if (cdnet.available()) { uint8_t src, port, len; uint8_t buffer[128]; len = cdnet.readL0(&src, &port, buffer, sizeof(buffer)); } } ``` ### CDCTL01A用法 #### 基本CDCTL01A设置 ```cpp #include const uint8_t CS_PIN = 10; const uint8_t INT_PIN = 2; SimpleCDCTL cdctl(CS_PIN, INT_PIN); void setup() { Serial.begin(115200); SPI.begin(); // 使用MAC地址和波特率初始化CDCTL01A cdctl.begin(0x01, 1000000); // MAC 0x01, 1Mbps } void loop() { // 发送数据 uint8_t data[] = "你好 CDCTL01A!"; cdctl.write(data, sizeof(data)-1); // 接收数据 if (cdctl.available()) { uint8_t buffer[64]; uint8_t length = cdctl.read(buffer, sizeof(buffer)); // 处理接收到的数据 } } ``` #### 基于CDCTL01A的CDNET ```cpp #include #include SimpleCDCTL cdctl(10, 2); SimpleCDNET cdnet(&cdctl); void setup() { Serial.begin(115200); SPI.begin(); cdctl.begin(0x01, 2000000); // 2Mbps } void loop() { // 发送CDNET数据包 uint8_t data[] = {0x01, 0x02, 0x03}; cdnet.sendL0(0x02, 0x10, data, sizeof(data)); // 接收CDNET数据包 if (cdnet.available()) { uint8_t src, port, len; uint8_t buffer[128]; len = cdnet.readL0(&src, &port, buffer, sizeof(buffer)); } } ``` ## API参考 ### SimpleCDBUS类 #### 构造函数 - `SimpleCDBUS()` - 创建CDBUS实例 #### 方法 - `void begin(HardwareSerial *serial, uint8_t address)` - 使用串口和设备地址初始化 - `void send(uint8_t dst, uint8_t *data, uint8_t len)` - 发送数据包 - `uint8_t read(uint8_t *src, uint8_t *buffer, uint8_t max_len)` - 读取接收到的数据包 - `bool available()` - 检查是否有可用数据 - `void setFilter(uint8_t filter)` - 设置地址过滤器 - `void update()` - 处理传入数据(在循环中调用) ### SimpleCDCTL类 #### 构造函数 - `SimpleCDCTL(uint8_t cs_pin, uint8_t int_pin)` - 创建CDCTL01A实例 #### 方法 - `bool begin(uint8_t mac_address, uint32_t baud_rate)` - 初始化CDCTL01A - `bool write(uint8_t *data, uint8_t length)` - 发送数据 - `uint8_t read(uint8_t *buffer, uint8_t max_length)` - 接收数据 - `bool available()` - 检查是否有可用数据 - `uint8_t getStatus()` - 获取芯片状态 - `uint8_t readRegister(uint8_t reg)` - 读取芯片寄存器 - `void writeRegister(uint8_t reg, uint8_t value)` - 写入芯片寄存器 ### SimpleCDNET类 #### 构造函数 - `SimpleCDNET()` - 创建CDNET实例 #### 方法 - `void begin(HardwareSerial *serial, uint8_t address)` - 使用串口和设备地址初始化 - `void sendL0(uint8_t dst, uint8_t port, uint8_t *data, uint8_t len)` - 发送L0数据包 - `void sendL1(uint8_t dst, uint16_t port, uint8_t *data, uint8_t len)` - 发送L1数据包 - `uint8_t readL0(uint8_t *src, uint8_t *port, uint8_t *buffer, uint8_t max_len)` - 读取L0数据包 - `uint8_t readL1(uint8_t *src, uint16_t *port, uint8_t *buffer, uint8_t max_len)` - 读取L1数据包 - `bool available()` - 检查是否有可用的CDNET数据包 ## 示例 查看`examples/`目录中的完整示例程序: - `BasicCDBUS/` - 基本CDBUS通信(串口) - `BasicCDNET/` - 基本CDNET通信(串口) - `CDCTL01A_Basic/` - 基本CDCTL01A芯片用法 - `STM32/CDCTL01A_STM32/` - STM32与CDCTL01A - `MultiNode/` - 多节点通信示例 - `SensorNetwork/` - 传感器网络实现 ## 许可证 本库在MPL许可证下发布。有关详细信息,请参阅LICENSE文件。 ## 贡献 欢迎贡献!请阅读CONTRIBUTING.md了解指南。 ## 支持 如有问题和疑问,请使用GitHub问题跟踪器。