当前位置: 首页 > news >正文

SPI寄存器地址写错半年——0x01和0x10只差一个bit

一句话: ADC 寄存器地址写成了 NOP 空操作,半年没发现——因为返回值被公式包装成了"合法负数"。翻数据手册逐位对照 SPI 帧格式才找到这个bit级的错误。

适合谁读:SPI 通信不正常但"看起来有返回值"的嵌入式开发者。

现象

读 ADC 的 4 路数据全是死值,但死值看起来"正常"——不是 0x0000 或 0xFFFF,是带公式换算后的负数,像 -5000mV。读代码的人第一反应是"硬件接错了",不是"寄存器地址写错了"。

查了三轮

第一轮:怀疑基准电压没开。改了电源配置寄存器,数据不动。后来确认基准本来就是开的,还原。

第二轮:怀疑 SPI 读数据的时机不对。SPI 有个惯例——当前帧返回上一帧的结果。代码在第 3 帧读数据,但 ADC 结果在第 2 帧就返回了。把读数据时机提前,数据还是不动。

第三轮:翻数据手册,逐位拆 SPI 帧格式。

手工拆一个寄存器地址

数据手册给出的 SPI 帧格式(16 位):

D15D14:D11D10:D9D8:D0
0(写)寄存器地址保留00数据

寄存器映射表:

0000 = NOP(空操作) 0001 = DAC 回读 0010 = ADC 序列寄存器 ← 要操作的是这个 0011 = 通用控制 0100 = ADC 引脚配置

代码里写的是Spi_Tx_Buff[0] = 0x01。拆成二进制:

0x01 = 0000_0001 D15=0, D14:D11=0000, D10:D9=00, D8:D0=001 寄存器地址 = 0000 = NOP

写了 NOP 空操作——不启动任何转换。ADC 从未被触发过,当然读到的全是 0。正确的值是0x10

0x10 = 0001_0000 D15=0, D14:D11=0010, D10:D9=00, D8:D0=000 寄存器地址 = 0010 = ADC_SEQ

一个 bit 的差别:0x01 把 D4 写成 0,0x10 把 D4 写成 1。半年没人发现。

为什么半年没发现

返回值被公式包装了。ADC 读回 0,经过电压换算公式变成 -5000mV——一个看起来"有意义的负数",而不是裸的 0x0000。"有值"的表象掩盖了"值是错的"这个事实。

如果直接打印原始 ADC 码值而不是换算后的工程值,第一天就能发现 4 路全是 0。

怎么避免

读 SPI 器件返回值异常时,先看原始寄存器值,再看物理量换算值。裸的 0x0000 比 -5000mV 直观得多。

写寄存器地址时对着手册逐位拆一次。0x100x01这种差一个 bit 的拼写,肉眼扫过去根本看不出来。


有用的话点个收藏,下次调试直接用。有问题欢迎评论区交流,看到了都会回。

http://www.cnnetsun.cn/news/3619263.html

相关文章:

  • 高速ADC数字下变频与JESD204B接口实战:从原理到系统调试
  • AIGC与大模型:AI新手的核心技术指南
  • Agentic AI核心技术解析与2025年应用展望
  • Vibe Coding 不是终点:AI 编程教育真正该补的是打开黑盒的能力
  • 2个麦克风媲美4个?AR1106实测10°精度+5米拾音,成本仅1/3
  • Kubernetes核心架构与生产环境实战指南
  • 计算机毕业设计之基于SpringBoot的南留旺大药房中药库存管理平台设计与实现
  • TCA9555 I2C I/O扩展器:从寄存器配置到实战驱动详解
  • iPhone+UE5+OBS:零门槛搭建高精度Metahuman数字人直播系统
  • AI伦理与算法偏见的技术分析与实践
  • 亚马逊CLI vs MCP vs <br>API: 4实测
  • OpenClaw集成国产大模型API实战指南
  • AI API 接入踩坑记录:限流、重试、降级策略
  • TI TLV320AIC12K/14K音频编解码器评估板硬件连接与软件配置全解析
  • 独家!高导热、高导电3D打印铝合金来了:中体新材引入空客旗下Scalmalloy® EX
  • 企业级ChatBot解决方案:从技术选型到工业级落地
  • HTML文件压缩优化实战:提升网页加载速度40%
  • 从静态漫画到动态漫:如何用 AI 让你的画面“动”起来?
  • Linux内核源码阅读指南:从入门到精通
  • YOLOv8-seg改进的衣物识别图像分割系统实践
  • 基于YOLOv10的皮肤病智能识别系统设计与实现
  • 黑客蹲端口扫描?SSH 密钥免密 + 四重加固,让暴力破解直接失效。
  • 零基础也能上手!OpenClaw ,Windows部署办公自动化工具完整配置流程
  • 大数据量可视化用哪个图表库性能比较好?
  • 迷你世界余小乐:那条射向云端的咸鱼
  • AFE5401-Q1 PCB布局实战:混合信号处理与VQFN封装设计要点
  • 【毕业设计】基于Django的智能化宿舍报修卫生考勤管理平台实现 高校宿舍智能安防与日常管理系统设计(源码+文档+远程调试,全bao定制等)
  • 为了追回那笔“误转”的USDT,我卧底了一个“链上黑客”群,发现了一个残酷真相
  • AI做电商到底怎么赚钱?93%的创业者忽略的3个高毛利场景(内部测试报告)
  • OpenClaw与vLLM本地大模型高效部署优化实战