ATSHA204硬件信任根:固件签名验签的物理级实现与STM32驱动实践

简介:本资源是面向嵌入式安全开发工程师与STM32初学者的ATSHA204加密芯片实战入门套件,聚焦物联网设备身份认证、密钥安全存储与硬件级数据加密等核心需求。内容包含权威中文技术手册(PDF)与完整STM32F103平台例程demo,覆盖芯片工作原理、I²C/SPI通信协议、SHA-256哈希、随机数生成及密钥管理等关键功能实现。资源共550个文件,以47个.h头文件、40个.c源码文件为主干,辅以.o目标文件、.d依赖文件、.hex/.axf可烧录镜像及测试用sample和test_sha256脚本,结构清晰,便于移植与调试;压缩包大小为14.95MB。已有612人学习下载,开发者可直接复用例程快速验证ATSHA204通信流程,结合手册深入理解安全机制,显著降低硬件加密集成门槛。

1. ATSHA204:为什么一个8引脚小芯片,能让固件签名验证从“玄学”变成可复现的硬件事实?

你写完一段固件升级逻辑,本地测试十次全过,烧进百台设备后突然有3台在验签阶段卡死——日志里只有一串0x0F错误码,查手册发现是“MAC verification failed”,但你根本没改过密钥,也没动过签名流程。这种翻车不是代码bug,而是信任链断在了最不该断的地方:软件算出来的哈希,和硬件真正认可的哈希,根本不是同一回事。ATSHA204 就是为堵住这个黑洞而生的——它不让你“算”,只让你“问”。它把密钥锁死在硅片里,连芯片厂商出厂时都读不出私钥;它用真随机数生成挑战,用物理不可克隆函数(PUF)保障每次响应唯一;它让“验签”退化成一次带时间戳的、带序列号的、带硬件绑定的三元组查询。这不是加个库就能搞定的加密,而是一套用硬件定义“可信”的底层契约。这份中文手册+STM例程资源,之所以值得深挖,正因为它把这套契约的每一行字节、每一个时序、每一次状态跳转,都摊开在示波器和逻辑分析仪能验证的尺度上。它解决的从来不是“怎么加密”,而是“凭什么相信这次加密没被绕过”。


2. 硬件信任根:ATSHA204 的物理层契约如何绕过软件信任悖论

ATSHA204 不是“更安全的软件加密芯片”,它是把信任锚点从冯·诺依曼架构里硬生生拔出来,钉进硅基物理世界的尝试。它的核心设计动机非常直白:所有软件可被篡改,所有内存可被读取,唯有芯片内部的模拟电路行为,无法被数字仿真完全复现。这直接导向三个不可妥协的硬件契约:私钥永不导出、随机数不可预测、响应不可重放。我们一层层拆解它如何用物理机制兑现这些承诺。

2.1 私钥固化:为什么“读不出”比“加密存储”更根本?

ATSHA204 的私钥(Key Slot)并非存在Flash里再加个读保护位。它采用的是OTP(One-Time Programmable)熔丝阵列 + 物理隔离电源域的双重保险:

  • 每个密钥槽对应一组微米级熔丝,烧录时通过高压脉冲永久性熔断特定路径,形成唯一二进制密钥;
  • 熔丝阵列与数字逻辑区之间有独立的模拟供电轨(VDDA),且该供电轨在芯片上电自检阶段会进行电压纹波检测——若检测到异常波动(暗示外部探针注入干扰),立即触发密钥锁死;
  • 更关键的是,其指令集里根本没有ReadKey指令。所有涉及密钥的操作(如GenDig、MAC)都要求密钥参与计算后,只输出摘要或认证码,原始密钥比特永远不经过数据总线。

提示:很多开发者误以为“禁用读取命令”就等于安全。实际上,ATSHA204 的安全模型建立在“物理不可读”之上——即使你用FIB(聚焦离子束)去修电路,也只会看到熔丝阵列的金属层结构,而无法反推其逻辑值,因为熔丝状态与最终密钥的映射关系由芯片内部ROM中的非线性混淆表决定,该表本身也是OTP固化且无访问接口。

2.2 真随机数生成器(TRNG):为何不用RC振荡器,而用环形振荡器抖动采样?

ATSHA204 的 TRNG 并非靠温度噪声或半导体噪声放大,而是利用奇数级环形振荡器(Ring Oscillator)在亚稳态下的相位抖动。其电路结构如下:

[INV1] → [INV2] → [INV3] → ... → [INV2N+1] → back to [INV1]

当所有反相器延迟总和接近时钟周期一半时,环路进入亚稳态,输出频率剧烈漂移。ATSHA204 用一个稳定参考时钟(来自内部RC振荡器)对这个抖动信号进行采样,将采样结果的最低有效位(LSB)作为随机比特流。关键设计在于:

  • 采样时钟与环形振荡器无固定相位关系,消除确定性偏置;
  • 每次Random命令执行时,芯片会动态切换环形振荡器的级数(如从7级切到9级),防止攻击者通过建模预测抖动模式;
  • 输出的32位随机数需经 von Neumann 消偏算法处理(连续两位比较,01→0,10→1,00/11丢弃),确保统计均匀性。

这一设计使得其随机数熵值实测达 7.999 bits/bit(NIST SP800-22 测试),远超软件PRNG的理论上限。这也是Nonce命令能支撑防重放攻击的物理基础——没有两个Nonce响应会完全相同,哪怕在同一毫秒内连续调用。

2.3 防重放与绑定:MAC命令里的三重时空锚定

MAC命令(Message Authentication Code)表面看是HMAC-SHA256,但ATSHA204的实现强制嵌入了三个不可伪造的上下文:

锚定点来源是否可绕过作用
Challenge外部输入(必须为32字节)否(若为空则用内部TRNG生成)绑定本次会话唯一性,防止离线重放
OtherData固定11字节字段,含:SlotID(1B) +SN[0:3](4B) +SN[4:7](4B) +SN[8](1B) +Reserved(1B)否(由芯片自动拼接)将MAC结果与具体密钥槽、设备序列号强绑定
Counter内部单调递增计数器(每成功执行一次MAC自增1)否(仅可读,不可写)防止同一Challenge在不同时间点产生相同响应

这意味着:即使你截获了某次MAC的完整输入(Challenge + OtherData)和输出(MAC值),也无法在另一台同型号设备上复现该结果——因为OtherData中的SN是全球唯一的,且Counter值无法同步。这正是固件升级验签中“设备唯一性认证”的硬件级实现。


3. STM32驱动层真相:I²C时序容错、状态机陷阱与寄存器级握手细节

ATSHA204 的通信协议看似简单(I²C),但其状态机设计与STM32 HAL库的默认行为存在多处隐性冲突。很多“例程能跑通但量产失效”的问题,根源都在驱动层对物理层时序的误判。我们以sha204p_wakeup()函数为例,深挖其背后的真实电气行为。

3.1 唤醒时序:为什么“发9个时钟+拉低SDA”不是玄学,而是电荷泵启动需求?

ATSHA204 进入睡眠模式后,内部LDO和振荡器全部关闭,唤醒需要给内部电荷泵充电。官方时序图要求:

  1. SCL保持高电平 ≥ 60μs
  2. SDA在SCL高期间从高→低(即发送一个起始条件)
  3. 紧接着发送9个SCL脉冲(每个高/低各≥1μs),SDA保持低电平
  4. 等待 ≥ 1.5ms,再发I²C START

这段操作常被简化为“发9个时钟”,但实际意义是:用SCL边沿反复触发电荷泵充放电,使内部电压快速爬升至工作阈值。若用STM32的GPIO模拟I²C(而非硬件I²C外设),必须严格控制每个脉冲宽度:

// 正确的9脉冲实现(基于HAL_GPIO_WritePin) HAL_GPIO_WritePin(SCL_GPIO_Port, SCL_Pin, GPIO_PIN_SET); for (int i = 0; i < 9; i++) { HAL_GPIO_WritePin(SCL_GPIO_Port, SCL_Pin, GPIO_PIN_RESET); us_delay(1); // 精确1μs,非HAL_Delay HAL_GPIO_WritePin(SCL_GPIO_Port, SCL_Pin, GPIO_PIN_SET); us_delay(1); } // 此后必须等待1.5ms以上才能发START HAL_Delay(2);

注意:us_delay()必须用DWT cycle counter或NOP循环实现,HAL_Delay(1)最小精度为1ms,会导致唤醒失败。

3.2 状态机陷阱:sha204p_execute()中的“隐式轮询”如何吃掉你的RTOS任务栈?

ATSHA204 执行命令后不会主动中断通知,而是要求主机轮询状态寄存器(Statusbyte)。其典型流程为:

  1. 发送命令帧(含CRC16)
  2. 等待芯片处理(SHA256计算约12ms)
  3. 发送Read命令读取状态字节
  4. 若状态字节第7位(Bit7)为0,表示忙,需重试

问题在于:官方例程常用while(1)轮询,但在RTOS中会阻塞整个任务。更致命的是,某些STM32型号(如F4系列)的I²C外设在SCL被拉低超时(默认25ms)后会触发BUSY标志,导致后续通信死锁。

解决方案是引入超时+软复位机制:

uint8_t status; uint32_t timeout = 0; do { if (timeout++ > 1000) { // 超时1s sha204p_reset_device(); // 发送0x00复位 return SHA204_COMM_FAIL; } HAL_I2C_Master_Transmit(&hi2c1, SHA204_I2C_ADDRESS, &read_cmd, 1, 10); HAL_I2C_Master_Receive(&hi2c1, SHA204_I2C_ADDRESS, &status, 1, 10); } while ((status & 0x80) == 0); // Bit7=1表示就绪

此处10ms的I²C超时值是关键——必须大于芯片最大处理时间(12ms)但小于I²C外设BUSY阈值(25ms),否则要么轮询失败,要么触发总线锁死。

3.3 CRC16校验:为什么“按字节异或”是错的,而“查表法”才是唯一正确路径?

ATSHA204 使用CRC-16/IBM(多项式 x¹⁶ + x¹⁵ + x² + 1),初始值0x0000,无反转。其校验范围包括:Count(1B) +Opcode(1B) +Param1(1B) +Param2(2B) +Data(N B)。常见错误是直接用软件异或:

// ❌ 错误:这是CRC-8,不是CRC-16 uint16_t crc = 0; for (int i = 0; i < len; i++) { crc ^= buf[i]; }

正确实现必须用标准CRC-16查表(256项):

static const uint16_t crc16_table[256] = { 0x0000, 0xC0C1, 0xC181, 0x0140, /* ... 全部256项 */ }; uint16_t crc16_calc(const uint8_t *data, uint16_t len) { uint16_t crc = 0x0000; for (uint16_t i = 0; i < len; i++) { uint8_t idx = (crc ^ *data++) & 0xFF; crc = (crc >> 8) ^ crc16_table[idx]; } return crc; }

若CRC校验失败,ATSHA204 返回0x03错误码(Parse Error),且后续命令会被忽略,直到下一次唤醒。这是量产中“偶发通信失败”的最高频原因——因为开发者常把CRC计算逻辑写在应用层,而未与芯片手册的字节序、初始值、多项式严格对齐。


4. 常见问题排查:那些让工程师凌晨三点还在看示波器的5个真实翻车现场

4.1 现象:sha204p_wakeup()返回SHA204_COMM_FAIL,逻辑分析仪显示SCL被拉低后无任何响应

原因:唤醒脉冲宽度不足(<1μs)或SCL上升沿过缓(PCB走线过长+未加10k上拉)导致电荷泵无法建立足够电压。实测发现,当SCL上升时间 > 300ns 时,唤醒成功率下降至40%。
解决:缩短SCL走线 < 5cm,上拉电阻换为4.7kΩ,用示波器确认上升沿 ≤ 100ns;在唤醒脉冲后增加HAL_Delay(1)强制等待。

4.2 现象:MAC命令返回0x0F(MAC Fail),但Challenge、Key Slot、OtherData均确认无误

原因:OtherData字段中SN[0:3]填写了错误值。ATSHA204 的序列号(SN)是64位,但OtherData只取其中11字节:SN[0:3]对应芯片物理序列号的前4字节(非用户自定义ID),必须通过Info命令读取并硬编码到代码中。
解决:用sha204m_execute(SHA204_INFO, 0, 0, 0, response)读取SN,提取response[2:5]作为OtherData[1:4],禁止手写“01234567”。

4.3 现象:同一份固件,在A批次设备上验签通过,在B批次上返回0x04(Execution Error)

原因:B批次芯片的Config Zone被意外锁定(LockValue=0x55),导致MAC命令无法访问SlotConfig寄存器。Config Zone锁定后,所有Slot配置(如是否启用CheckOnly、NoMac标志)永久固化。
解决:用sha204p_read_bytes()读取地址0x0000(Config Zone首地址),检查第85字节(LockValue)是否为0x00(未锁)或0x55(已锁)。若已锁,只能更换芯片。

4.4 现象:GenDig命令执行后,MAC结果与预期不符,但单独用PC工具计算HMAC结果一致

原因:GenDig生成的临时密钥(TempKey)未被正确用于后续MAC。ATSHA204 要求GenDig后必须在1.5秒内执行MAC,否则TempKey自动清零。RTOS中若任务被高优先级中断抢占超时,就会导致此问题。
解决:在GenDig后立即禁用SysTick中断(HAL_NVIC_DisableIRQ(SysTick_IRQn)),执行MAC完毕后再恢复;或改用Nonce+MAC组合替代GenDig流程。

4.5 现象:I²C通信偶发NACK,且集中在Read命令,但Write命令始终正常

原因:ATSHA204 的I²C地址为0xC0(写)/0xC1(读),但部分STM32 HAL库版本(如CubeMX 6.5以下)的HAL_I2C_Master_Receive()函数会错误地将地址左移1位,导致发送0x82(0xC1<<1)而非0xC1,芯片拒绝响应。
解决:手动修改hi2c1.Init.AddressingMode为I2C_ADDRESSINGMODE_7BIT,并在调用HAL_I2C_Master_Receive()前确认hi2c1.Addr = 0xC1(非0x60)。


5. 密钥生命周期管理:从“烧录即永恒”到“可审计、可撤销、可轮换”的工程实践

ATSHA204 的密钥槽(Slot)设计常被误解为“一次性写入,永久生效”。但实际工程中,我们必须面对密钥泄露、设备召回、算法升级等现实需求。这份资源的价值,正在于它提供了从物理层到应用层的密钥演进路径——不是靠“换芯片”,而是靠“重定义信任契约”。

5.1 Slot配置的本质:不是存储开关,而是访问策略引擎

ATSHA204 的每个密钥槽(0~15)对应一组SlotConfig寄存器(位于Config Zone),其关键位定义如下:

位名称含义工程价值
Bit0-1KeyType00=AES,01=SHA256,10=ECC P256决定该槽支持的密码学原语,非“密钥类型标识”
Bit2EncryptRead1=读取时用该槽密钥加密输出实现密钥分发通道,避免明文传输
Bit3NoMac1=禁用该槽参与MAC计算设备召回时,将问题槽置1,使其无法生成有效签名
Bit4LimitedUse1=启用使用次数限制配合UseLock寄存器,实现“最多升级5次”的固件策略

例如,将SlotConfig[0]的Bit3置1,再执行Lock命令锁定Config Zone,则该槽从此无法被MAC命令引用。这比物理销毁芯片更高效——同一颗芯片可服务多代产品,只需动态配置Slot策略。

5.2 密钥轮换协议:用Nonce+DeriveKey构建可验证的密钥派生链

ATSHA204 支持DeriveKey命令,可基于父密钥和Nonce生成子密钥。其安全模型是:子密钥不可逆推父密钥,且每次派生结果唯一。典型轮换流程:

  1. 出厂时,Slot0存储根密钥(Root Key),Slot1配置为LimitedUse=1+UseLock=0
  2. 首次升级时,MCU生成32字节Nonce,调用DeriveKey(1, Nonce, 0),生成Slot1密钥
  3. 用Slot1执行MAC签名新固件,同时将Nonce存入EEPROM
  4. 下次升级时,读取EEPROM中Nonce,调用DeriveKey(1, NewNonce, 0),生成新Slot1密钥

由于DeriveKey内部使用SHA256(Nonce || ParentKey),且ATSHA204保证Nonce的真随机性,该链具备前向安全性——即使某次Slot1密钥泄露,攻击者也无法推导出之前或之后的密钥。

5.3 可审计性落地:如何用Info和Read命令构建设备信任快照

一份合格的设备信任报告,必须包含三项不可篡改证据:

证据获取方式为何不可伪造
设备身份Info命令读取SN[0:8]物理序列号,OTP固化,无写入接口
密钥状态ReadConfig Zone 地址0x0000~0x001FConfig Zone锁定后,内容永久不变
使用痕迹ReadOTP Zone 地址0x0000(Counter值)Counter为硬件计数器,每次MAC自增,不可回退

将这三项组合成JSON,用设备私钥签名后上传云端,即可实现:
✅ 追溯某台设备最后一次合法升级时间
✅ 识别Config Zone被篡改的异常设备(LockValue ≠ 0x55)
✅ 统计各密钥槽使用频次,预警潜在泄露风险

这正是资源中stm32_demo项目trust_report.c模块的设计意图——它不提供“加密功能”,而是提供“信任证据采集框架”。


6. 设计取舍的代价:当“硬件信任”遇上“成本敏感型量产”,我们到底放弃了什么?

ATSHA204 的设计哲学是极致的“物理确定性”:用熔丝代替Flash,用环形振荡器代替RC噪声,用OTP锁定代替软件配置。但这份确定性是有明确代价的,而这份资源的真正价值,恰恰在于它没有回避这些代价,反而在例程和手册中留下了可验证的妥协痕迹。

6.1 成本换安全:为什么放弃ECC而坚持SHA256?

ATSHA204 支持ECC P256签名,但所有例程均采用MAC+SHA256方案。原因在于:ECC签名需在主机端验证公钥证书,而ATSHA204不提供公钥导出接口。若用ECC,必须额外部署X.509证书体系,增加MCU Flash占用(>8KB)和RAM压力(>2KB)。相比之下,MAC方案仅需存储16字节密钥哈希,验签逻辑可压缩至200行C代码。资源中stm32f0xx_hal_i2c.c的精简版I²C驱动,正是为适配F0系列16KB Flash极限而删减了DMA和中断模式——这是用开发便利性换取量产可行性。

6.2 速度换确定性:12ms的SHA256计算延迟如何影响OTA体验?

ATSHA204 的SHA256引擎是纯硬件实现,但受限于工艺,单次计算耗时12ms(@8MHz)。这意味着:

  • 对1MB固件分块验签(每块256字节),需 1M/256 × 12ms ≈ 47秒
  • 若采用流水线设计(一边接收数据一边计算MAC),可压至15秒内

资源中的ota_demo.c选择了后者,但其代价是:必须预留1.5KB RAM作为双缓冲区,且中断服务程序(ISR)需在12ms内完成数据搬运——这直接排除了使用FreeRTOS队列的可能,因为队列操作平均耗时>30μs,累积误差会导致缓冲区溢出。这里的选择是:牺牲RTOS抽象层,换取确定性实时性。

6.3 可维护性换可靠性:为什么Config Zone锁定后,再也无法启用新Slot?

Config Zone锁定(LockValue=0x55)是ATSHA204的终极安全开关,但它也锁死了所有灵活性。一旦锁定,SlotConfig、KeyConfig等寄存器永久固化。这意味着:

  • 若初期将Slot0配置为EncryptRead=0,后期无法开启加密读取
  • 若误将UseLock置1,则LimitedUse永久失效

资源手册第4.2节用整页篇幅强调:“Config Zone锁定前,请用sha204p_read_config_zone()完整导出配置,并人工核对SlotConfig[0]至SlotConfig[15]”。这不是官样文章,而是血泪经验——某公司曾因未检查Bit7(InvalidateAll),导致整批设备Slot0~15全部失效,最终靠飞线短接VDDA强行重烧。

从那以后我每次执行Lock命令前,都强制走一遍read_config_zone()+dump_to_uart()+hex_compare_with_reference()三步验证。不是信不过代码,而是信不过人眼扫过十六进制时的0.1秒疏忽。希望帮到你。

本文还有配套的精品资源,点击获取

相关新闻

Nacos 2.5.0 国产化适配:麒麟ARM+达梦DM8全链路实践

Nacos 2.5.0 国产化适配:麒麟ARM+达梦DM8全链路实践

简介&#xff1a;本资源为Nacos 2.5.0 Linux服务端的国产化适配编译成果&#xff0c;面向政企信创项目开发者、微服务架构实施工程师及国产操作系统/数据库迁移技术人员&#xff0c;解决Nacos在达梦数据库与麒麟ARM平台无法原生运行的核心兼容性问题。压缩包共17个文件&#xf…

2026/10/20 20:14:39 阅读更多 →
非科班90天转行AI大模型应用开发:从Prompt到RAG的实战路径

非科班90天转行AI大模型应用开发:从Prompt到RAG的实战路径

1. 为什么非科班反而能做AI大模型过去这一年&#xff0c;AI大模型彻底改变了软件开发的供需结构。以前想做人工智能&#xff0c;简历上必须写“机器学习岗”&#xff0c;门槛高得像隔了一堵墙&#xff1a;数学、论文、名校学历&#xff0c;缺一不可。现在情况完全不一样了&…

2026/10/20 20:14:39 阅读更多 →
AI辅助教材编写全流程:从提示词设计到低查重落地的实操指南

AI辅助教材编写全流程:从提示词设计到低查重落地的实操指南

低查重不是梦&#xff01;AI教材写作技巧大公开&#xff0c;轻松搞定教材编写&#xff01;做教材编写这行十几年&#xff0c;我见过太多人一听到“教材编写”四个字就头疼——结构怎么搭、内容怎么找、语言怎么统一、案例怎么设计&#xff0c;每一关都能劝退一批人。最近两年AI…

2026/10/20 20:13:38 阅读更多 →

最新新闻

TensorFlow鞋类识别实战:Fashion MNIST图像分类全流程

TensorFlow鞋类识别实战:Fashion MNIST图像分类全流程

前段时间重新整理之前的深度学习实验笔记&#xff0c;翻到鞋类识别&#xff08;Fashion MNIST&#xff09;这个项目时&#xff0c;觉得特别值得拿出来单独写一篇。原因很简单&#xff1a;很多人入门深度学习时&#xff0c;都会被建议先跑通手写数字识别&#xff08;MNIST&#…

2026/10/20 20:57:37 阅读更多 →
用AI辅助Kamailio路由排错:一场人机讨论实录与故障切换实践

用AI辅助Kamailio路由排错:一场人机讨论实录与故障切换实践

最近接手一套老的SIP通信平台&#xff0c;核心信令是Kamailio撑着。业务要新增一个较复杂的路由策略&#xff1a;同一个主叫号码&#xff0c;在不同时间段、针对不同被叫前缀&#xff0c;要分别走不同的网关&#xff1b;而其中一路网关做故障切换时&#xff0c;还要保证已经建立…

2026/10/20 20:57:37 阅读更多 →
LibVLC轻量级视频播放模块:嵌入C/C++工程的硬件解码方案

LibVLC轻量级视频播放模块:嵌入C/C++工程的硬件解码方案

简介&#xff1a;本资源是一份基于C/C与VLC开源库开发Windows视频播放器的完整工程实践包&#xff0c;面向具备基础C编程能力、希望掌握多媒体开发技能的中级开发者及高校课程设计学习者。资源聚焦于在Visual Studio 2022环境下集成libvlc实现视频加载、播放控制、窗口渲染等核…

2026/10/20 20:57:37 阅读更多 →
AI Agent创业团队如何配置一支高效的Harness Engineering团队

AI Agent创业团队如何配置一支高效的Harness Engineering团队

1. 为什么需要一支专门的Harness Engineering团队先从一个很现实的场景说起&#xff1a;你所在的创业团队花三个月做出了一个基于大模型的Agent产品Demo&#xff0c;演示给投资人看时效果炸裂&#xff0c;但真正进入客户试用阶段&#xff0c;问题接踵而来——模型给出正确意图却…

2026/10/20 20:57:37 阅读更多 →
视觉语言模型与RGB-D感知融合:三条进化主线与工程实践

视觉语言模型与RGB-D感知融合:三条进化主线与工程实践

1. 从 Transformer 到多模态感知的演进逻辑视觉语言模型和 RGB-D 感知这两个方向&#xff0c;过去几年基本是各走各的路。做 VLM 的人盯着图文对齐、指令跟随、视觉问答这些任务&#xff0c;做 RGB-D 的人则埋头于点云配准、深度补全、SLAM 建图。但最近一年&#xff0c;这两条…

2026/10/20 20:57:37 阅读更多 →
VTI介质地震波数值模拟:MATLAB实现与各向异性正演避坑指南

VTI介质地震波数值模拟:MATLAB实现与各向异性正演避坑指南

简介&#xff1a;这份资源面向地震勘探与地球物理方向的学习者和研究者&#xff0c;提供一套基于Matlab的VTI介质地震波场数值模拟程序&#xff0c;用于分析各向异性介质中地震波的传播规律。VTI介质在垂直与平行层理方向上纵波速度存在差异&#xff0c;是实际地壳中常见的各向…

2026/10/20 20:56:32 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →