feat(gml670-v2): 添加二进制协议定义与 ADS1256 SPI 驱动

- protocol.h: CoP/Encoder/Resistance/Spotter/Heartbeat 帧定义,
  GML670 50kg ADC→kg 标定参数
- ads1256: SPI 命令模式驱动,BUFEN=1 解决高阻抗负载误差,
  3750 SPS 平衡精度与采样率,SELFCAL + 寄存器回读校验

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-30 17:39:05 +08:00
parent 5492a98687
commit 97f0d65783
3 changed files with 375 additions and 0 deletions
+53
View File
@@ -0,0 +1,53 @@
#pragma once
#include <stdint.h>
/* sensor.c 切换通道时需要此寄存器地址 */
#define ADS1256_REG_MUX 0x01
/**
* @brief 初始化 ADS1256:配置 GPIO/SPI,复位芯片,写入寄存器,自校准。
* @return 0 成功,负 errno 失败。
*/
int ads1256_init(void);
/**
* @brief 等待 DRDY 拉低(转换结果可读),带超时保护。
* @param timeout_ms 超时时间(毫秒)。
*/
void ads1256_wait_drdy(uint16_t timeout_ms);
/**
* @brief 向 ADS1256 写单个寄存器。
* @param reg 目标寄存器地址。
* @param val 要写入的值。
*/
void ads1256_write_reg(uint8_t reg, uint8_t val);
/**
* @brief 从 ADS1256 读单个寄存器。
* @param reg 目标寄存器地址。
* @return 寄存器值。
*/
uint8_t ads1256_read_reg(uint8_t reg);
/**
* @brief 发送 SYNC + WAKEUP 命令,触发一次同步采样。
*/
void ads1256_sync_wakeup(void);
/**
* @brief 硬件复位 ADS1256(通过 RESET 引脚),等待复位后自校准完成。
*/
void ads1256_hwreset(void);
/**
* @brief 读取当前 24 位转换结果,符号扩展为 int32_t。
* @return ADC 原始值。
*/
int32_t ads1256_read_data(void);
/**
* @brief 发送单字节命令到 ADS1256。
* @param cmd 命令字。
*/
void ads1256_write_cmd(uint8_t cmd);