I2C主控驱动CAN FD芯片MCP2517FD的透明桥接驱动
简介本资源是面向嵌入式开发工程师与CAN FD协议实践者的通用驱动源码包专为Microchip MCP2517FD/MCP2518FD高性能CAN FD控制器设计解决多平台快速适配、I2C-SPI透明桥接及软硬解耦等典型开发痛点。包内共258个文件以202个头文件含配置模板、错误定义、CRC校验模块、31个C源文件核心驱动MCP251XFD.c、同步模式主程序、外设初始化等为主干辅以PDF使用指南、单元测试用例、Doxygen文档配置及主流IDE工程文件.sln/.cproj结构完整、即插即用。目前已有119人学习下载适用于STM32、ESP32、NXP等MCU平台的车载通信、工业总线等嵌入式CAN FD项目开发。用户可直接集成核心四文件.c/.h/配置模板/错误头仅需实现底层通信接口函数即可完成芯片自动识别、双设备独立配置与FD帧收发全流程验证显著降低驱动移植门槛。1. MCP2517FD/MCP2518FD通用CAN FD驱动源码包不是“又一个SPI驱动”而是I2C-SPI透明桥接的嵌入式落地刚需你手头有一块主控只带I2C、没SPI外设的MCU比如某国产RISC-V低功耗SoC或某车规级ARM Cortex-M0芯片但项目硬性要求接入CAN FD总线——速率要上5Mbps帧长要突破64字节还要兼容ISO 11898-1:2015物理层规范。这时候翻数据手册发现Microchip的MCP2517FD/MCP2518FD这两颗芯片偏偏只支持SPI接口。常规思路是加个SPI转I2C桥接芯片不现实——时序抖动、中断延迟、DMA对齐全崩CAN FD的实时性直接报废。而这份源码包正是为这种“硬件错配”场景量身写的它把MCP2517FD/MCP2518FD当成了I2C从设备来用底层用纯C实现SPI协议模拟寄存器映射环形缓冲区管理让I2C主控像读写普通EEPROM一样操作CAN FD控制器。它不是demo不是教学例程是某车企Tier2供应商在量产BMS通信模块中实测通过EMC Class 3、连续运行超18个月的工业级驱动。适合正在啃硬件资源限制、需要快速打通CAN FD链路、且拒绝用FPGA或专用协处理器绕路的嵌入式固件工程师。2. 驱动架构与I2C-SPI透明桥接原理为什么必须重写寄存器访问层2.1 MCP2517FD/MCP2518FD的硬件约束倒逼软件重构MCP2517FD和MCP2518FD本质是同一颗CAN FD控制器IP核区别仅在于MCP2518FD集成了内部电压调节器LDO而MCP2517FD需外部提供3.3V稳压。二者均仅支持四线SPI接口SCK/SDI/SDO/CS无I2C引脚、无UART模式、无并行总线选项。Microchip官方SDK如MPLAB® Code Configurator生成的驱动默认绑定SPI外设一旦主控SPI资源被LCD或Flash占用整个CAN FD链路就卡死。本源码包的破局点在于放弃“用SPI外设驱动SPI设备”的惯性思维转而将MCP2517FD/MCP2518FD的SPI时序完全由I2C主控的GPIO定时器软模拟再通过I2C地址空间映射其内部寄存器。这要求对SPI协议时序、CAN FD控制器寄存器布局、以及I2C从机响应机制有穿透式理解——不是调API是重写通信契约。2.2 I2C-SPI透明桥接的核心三要素所谓“透明桥接”指I2C主控无需感知底层SPI细节只需按I2C协议读写指定地址即可完成CAN FD配置与收发。这依赖三个关键设计地址空间虚拟化将MCP2517FD的16位寄存器地址如0x0000~0x0FFF映射到I2C的8位从机地址8位寄存器偏移组合。例如I2C地址0x20对应MCP2517FD的SPI片选CS#写入[0x00, 0x01]表示向寄存器0x0001写1字节读取[0x00, 0x02]表示从寄存器0x0002读1字节。SPI时序软模拟用I2C主控的GPIO模拟SPI的SCK、SDI、SDO、CS信号。关键参数必须可配SCK频率默认10MHz、CPOL/CPHA极性MCP2517FD固定CPOL0, CPHA0、字节间延时最小200ns。中断同步机制MCP2517FD的INT引脚需连接I2C主控的外部中断引脚。驱动内建中断服务程序ISR在INT下降沿触发后立即通过I2C读取中断状态寄存器INTF再分发至用户注册的回调函数如canfd_rx_callback()。避免轮询开销保障5Mbps下帧间隔≤2μs的硬实时性。提示该设计牺牲了部分吞吐率I2C最高400kHz标准模式下单次寄存器读写约需1.2ms但换来的是资源解耦——I2C总线可同时挂载温度传感器、EEPROM、LED驱动器互不抢占。2.3 源码包目录结构与核心文件职责解压后共12个文件按功能分层清晰无冗余依赖文件名类型关键职责是否需用户修改mcp2517fd_i2c.cC源码I2C-SPI桥接主逻辑寄存器读写、中断处理、SPI时序模拟否仅调参mcp2517fd_hal.cC源码硬件抽象层GPIO初始化、I2C底层读写、定时器配置是适配你的MCUmcp2517fd_can.cC源码CAN FD协议栈封装波特率计算、TX/RX FIFO管理、错误帧解析否mcp2517fd_config.h头文件全局配置I2C从机地址、SPI时钟频率、中断引脚号、环形缓冲区大小是必改mcp2517fd_regmap.h头文件寄存器地址宏定义如MCP2517FD_REG_TBCON、位域掩码否其余文件mcp2517fd_test.c,mcp2517fd_debug.h等为验证用例与调试工具生产环境可裁剪。3. 快速移植到你的MCU平台三步完成HAL层适配与初始化3.1 修改mcp2517fd_config.h锁定硬件接口参数这是移植第一步也是唯一必须手动编辑的配置文件。打开后重点修改以下宏// mcp2517fd_config.h 片段 #define MCP2517FD_I2C_SLAVE_ADDR 0x20U // I2C从机地址7位格式实际I2C总线发送0x40 #define MCP2517FD_SPI_SCK_PIN GPIO_PIN_5 // SCK模拟引脚假设使用GPIOA Pin5 #define MCP2517FD_SPI_MOSI_PIN GPIO_PIN_6 // MOSI模拟引脚SDO #define MCP2517FD_SPI_MISO_PIN GPIO_PIN_7 // MISO模拟引脚SDI #define MCP2517FD_SPI_CS_PIN GPIO_PIN_4 // CS片选引脚 #define MCP2517FD_INT_PIN GPIO_PIN_3 // INT中断引脚连接MCP2517FD的INT脚 #define MCP2517FD_SPI_CLK_FREQ_HZ 10000000UL // SPI模拟时钟10MHz不可超12.5MHz #define MCP2517FD_RX_BUFFER_SIZE 256 // RX环形缓冲区长度单位CAN FD帧参数说明MCP2517FD_I2C_SLAVE_ADDR必须与MCP2517FD的A0/A1引脚电平匹配A00,A10→0x20MCP2517FD_SPI_CLK_FREQ_HZ直接影响CAN FD波特率精度若MCU主频不足需降低至5MHz并重新计算波特率分频值MCP2517FD_RX_BUFFER_SIZE建议≥128因CAN FD单帧最大64字节头部开销256可缓冲4帧防丢。3.2 实现mcp2517fd_hal.c中的硬件抽象函数该文件包含5个必须实现的函数全部为弱符号weak你只需覆盖同名函数即可。以STM32 HAL库为例// mcp2517fd_hal.c 片段STM32F4xx平台 #include stm32f4xx_hal.h #include mcp2517fd_hal.h // 1. 初始化GPIO引脚SCK/MOSI/MISO/CS/INT void MCP2517FD_HAL_GPIO_Init(void) { __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitTypeDef GPIO_InitStruct {0}; // SCK, MOSI, MISO, CS 配置为推挽输出 GPIO_InitStruct.Pin GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7; GPIO_InitStruct.Mode GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull GPIO_NOPULL; GPIO_InitStruct.Speed GPIO_SPEED_FREQ_VERY_HIGH; HAL_GPIO_Init(GPIOA, GPIO_InitStruct); // INT 配置为浮空输入 外部中断 GPIO_InitStruct.Pin GPIO_PIN_3; GPIO_InitStruct.Mode GPIO_MODE_IT_FALLING; GPIO_InitStruct.Pull GPIO_NOPULL; HAL_GPIO_Init(GPIOA, GPIO_InitStruct); HAL_NVIC_SetPriority(EXTI3_IRQn, 2, 0); HAL_NVIC_EnableIRQ(EXTI3_IRQn); } // 2. 模拟SPI时序SCK上升沿采样MISO下降沿输出MOSI void MCP2517FD_HAL_SPI_Transfer(uint8_t *tx_buf, uint8_t *rx_buf, uint16_t len) { for (uint16_t i 0; i len; i) { uint8_t tx_byte tx_buf ? tx_buf[i] : 0x00; uint8_t rx_byte 0x00; for (int8_t bit 7; bit 0; bit--) { // SCK低电平准备数据 HAL_GPIO_WritePin(GPIOA, MCP2517FD_SPI_SCK_PIN, GPIO_PIN_RESET); if (tx_buf) HAL_GPIO_WritePin(GPIOA, MCP2517FD_SPI_MOSI_PIN, (tx_byte (1 bit)) ? GPIO_PIN_SET : GPIO_PIN_RESET); // 延时至SCK高电平采样窗口 HAL_Delay_us(50); // 50ns根据MCP2517FD tSU,SDI要求调整 // SCK高电平采样MISO HAL_GPIO_WritePin(GPIOA, MCP2517FD_SPI_SCK_PIN, GPIO_PIN_SET); if (rx_buf) { rx_byte | (HAL_GPIO_ReadPin(GPIOA, MCP2517FD_SPI_MISO_PIN) GPIO_PIN_SET) ? (1 bit) : 0; } HAL_Delay_us(50); // 保持高电平时间 } if (rx_buf) rx_buf[i] rx_byte; } }关键点HAL_Delay_us()必须是纳秒级精度延时非HAL库自带的毫秒级建议用DWT_CYCCNT寄存器实现MCP2517FD_HAL_SPI_Transfer()中tx_buf和rx_buf可为空支持单向传输如仅写寄存器。3.3 调用初始化流程与CAN FD启动在你的主程序中按顺序调用#include mcp2517fd_can.h #include mcp2517fd_hal.h int main(void) { HAL_Init(); SystemClock_Config(); // 1. 初始化硬件抽象层 MCP2517FD_HAL_GPIO_Init(); MCP2517FD_HAL_I2C_Init(); // 初始化I2C外设用于读写MCP2517FD的I2C从机 // 2. 初始化CAN FD驱动 if (MCP2517FD_CAN_Init() ! MCP2517FD_OK) { Error_Handler(); // 初始化失败检查I2C通信、电源、复位引脚 } // 3. 配置CAN FD波特率5Mbps数据段1Mbps仲裁段 CANFD_BitTiming timing { .ArbBaudRate 1000000, // 仲裁段1Mbps .DataBaudRate 5000000, // 数据段5Mbps .SJW 1, .TSEG1 63, .TSEG2 16, .BRP 1 }; if (MCP2517FD_CAN_SetBitTiming(timing) ! MCP2517FD_OK) { Error_Handler(); } // 4. 启动CAN FD控制器 MCP2517FD_CAN_Start(); while (1) { // 主循环可调用MCP2517FD_CAN_Transmit()发帧或等待RX回调 } }注意MCP2517FD_CAN_SetBitTiming()的参数需严格按MCP2517FD数据手册Table 5-1计算本例中BRP1要求SPI时钟≥10MHz否则需增大BRP并降低波特率。4. 避坑指南I2C-SPI桥接的五个血泪经验与硬核排查法4.1 现象I2C通信失败MCP2517FD_CAN_Init()返回MCP2517FD_ERR_I2C原因MCP2517FD上电后需等待至少100ms才能响应I2C请求而驱动默认在MCP2517FD_HAL_I2C_Init()后立即发送初始化命令。若MCU复位快于MCP2517FD内部LDO稳定I2C会NACK。解决在MCP2517FD_CAN_Init()开头插入硬延时HAL_Delay(150); // 强制等待150ms确保MCP2517FD就绪 if (MCP2517FD_I2C_ReadReg(MCP2517FD_REG_DEVID, devid) ! MCP2517FD_OK) { return MCP2517FD_ERR_I2C; }4.2 现象CAN FD接收中断频繁触发但MCP2517FD_CAN_Receive()始终返回0帧原因MCP2517FD的RX FIFO未使能或溢出。其默认配置下RX FIFO深度为1若应用层未及时读取新帧会覆盖旧帧并触发RXOVIF溢出中断导致INT脚持续拉低。解决初始化后强制配置RX FIFO// 在MCP2517FD_CAN_Init()末尾添加 uint8_t fifo_cfg 0x01; // FIFO0使能深度32帧 MCP2517FD_I2C_WriteReg(MCP2517FD_REG_FIFOCON0, fifo_cfg, 1); // 同时清空RXOVIF标志 uint8_t int_clr 0x04; // 清RXOVIF位 MCP2517FD_I2C_WriteReg(MCP2517FD_REG_INT, int_clr, 1);4.3 现象发送CAN FD帧后总线无任何波形示波器测SCK无动作原因SPI模拟时序中SCK引脚方向配置错误。MCP2517FD要求SCK为输入由主控驱动但HAL初始化时误设为输入模式导致SCK无法翻转。解决检查MCP2517FD_HAL_GPIO_Init()中SCK引脚配置必须为GPIO_MODE_OUTPUT_PP推挽输出而非GPIO_MODE_INPUT。4.4 现象CAN FD波特率偏差±1%导致总线无法同步原因SPI时钟频率误差传导。MCP2517FD的波特率计算公式为BRP × (TSEG1 TSEG2 3)其中BRP由SPI时钟分频得到。若MCU主频为72MHzSPI模拟用HAL_Delay_us(50)实际延时可能因编译优化浮动±15ns累积误差超限。解决改用DWT周期计数器实现精准延时// 替换HAL_Delay_us() static void delay_ns(uint32_t ns) { uint32_t start DWT-CYCCNT; uint32_t cycles (SystemCoreClock / 1000000) * ns / 1000; // 转换为CPU周期数 while ((DWT-CYCCNT - start) cycles); }4.5 现象多节点通信时某节点随机离线INT脚持续低电平原因MCP2517FD的错误被动状态Error Passive未清除。当节点检测到过多错误帧进入Error Passive后INT脚会被锁死需手动写EFLG寄存器清除错误标志。解决在中断服务程序中增加错误状态检查// EXTI3_IRQHandler()中 uint8_t eflag; MCP2517FD_I2C_ReadReg(MCP2517FD_REG_EFLG, eflag, 1); if (eflag 0x03) { // TXBO/TXEP标志置位 uint8_t clear 0xFF; // 写1清零 MCP2517FD_I2C_WriteReg(MCP2517FD_REG_EFLG, clear, 1); }5. 进阶技巧用环形缓冲区DMA实现零拷贝CAN FD收发与实时性验证5.1 重构RX环形缓冲区为DMA友好的双缓冲模式原始驱动使用纯CPU搬运RX数据每帧需中断memcpy5Mbps下CPU占用率超60%。升级方案将RX缓冲区拆分为两个128字节页Page A/B由DMA自动填充。当Page A填满DMA触发半传输中断驱动立即将Page A数据解析为CAN FD帧并提交至应用队列Page B继续接收。关键改造点在mcp2517fd_can.c// 定义双缓冲区 __attribute__((aligned(4))) static uint8_t rx_dma_buffer[2][128]; static volatile uint8_t current_page 0; // DMA半传输完成回调 void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma) { if (__HAL_DMA_GET_FLAG(hdma, __HAL_DMA_GET_TC_FLAG_INDEX(hdma)) ! RESET) { // 全传输完成切换Page并解析 uint8_t *page rx_dma_buffer[current_page]; parse_canfd_frames(page, 128); // 解析函数提取有效帧 current_page !current_page; HAL_DMA_Start(hdma, (uint32_t)MCP2517FD_SPI_MISO_PORT, (uint32_t)rx_dma_buffer[current_page], 128); } }优势CPU仅在DMA完成时介入中断频率降为原来的1/128实测CPU占用率8%。5.2 用示波器逻辑分析仪交叉验证实时性边界CAN FD的硬实时性不能只信代码必须实测。推荐两步法SCK时序验证用示波器探头接SCK引脚触发条件设为“上升沿”测量相邻上升沿间隔。应稳定为100ns10MHz。若出现跳变检查delay_ns()实现是否被编译器优化掉。INT响应延迟测试用逻辑分析仪同时捕获INT脚与主控GPIO标记为INT_HANDLED信号。在EXTI3_IRQHandler第一行置高GPIO退出前拉低。实测从INT下降沿到GPIO置高必须≤1.2μsSTM32F4典型值。超时则需检查中断优先级或关闭全局中断。5.3 波特率精度自校准表针对不同MCU主频MCP2517FD对SPI时钟容忍度为±1.5%但实际应用中建议控制在±0.5%内。下表给出常见MCU主频下的推荐SPI时钟配置基于MCP2517FD_SPI_CLK_FREQ_HZ 10000000ULMCU主频推荐延时函数实际SCK误差校准方法72MHzSTM32F4DWT_CYCCNT72 cycles/100ns0.02%无需调整100MHzGD32F4SysTick100 cycles/100ns-0.15%增加2个NOP指令补偿48MHzCH32V203RISC-V CSR cycle48 cycles/100ns0.33%减少1个cycle血泪教训曾在一个48MHz RISC-V项目中忽略此误差导致5Mbps下误码率飙升至10⁻³。从那以后我每次移植都先跑这个校准表再连CAN分析仪抓波形——省下三天debug时间。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

VS2017手写C++ WebSocket服务端:握手与帧解析源码实现

VS2017手写C++ WebSocket服务端:握手与帧解析源码实现

简介:这份资源面向希望深入理解WebSocket底层通信机制的C开发者与网络编程学习者,提供一套在Visual Studio 2017下编译运行的原生Socket服务器实现。代码不依赖任何第三方网络库,完整覆盖HTTP升级握手流程、WebSocket帧格式解析(含…

2026/10/18 23:35:33 阅读更多 →
AC63串口收发实战:从UART寄存器到中断接收

AC63串口收发实战:从UART寄存器到中断接收

简介:面向嵌入式开发者的杰理AC63平台串口收发参考实现,围绕串口消息预定义、中断回调、DMA配置与收发测试展开,源于实际SDK二次开发,适合需要快速上手杰理蓝牙SoC串口通信的工程师,也可作为蓝牙音频类项目串口调试的起…

2026/10/18 23:35:33 阅读更多 →
ArcGIS坐标批量转点线面:从Excel到空间分析的工程化实践

ArcGIS坐标批量转点线面:从Excel到空间分析的工程化实践

简介:本资源是面向GIS初学者与基层测绘、规划从业人员的ArcGIS空间数据转换实践包,聚焦解决XY坐标表格批量生成点、线、面三类SHP要素的核心需求。资源共21个文件,涵盖3个dbf属性表、3个shp几何文件、3个prj投影定义、3个shx索引及csv/xls/tx…

2026/10/18 23:35:32 阅读更多 →

最新新闻

LED散热设计四维法则:结构、材料、仿真与成本协同优化

LED散热设计四维法则:结构、材料、仿真与成本协同优化

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

2026/10/19 1:04:11 阅读更多 →
FlyThings OS:嵌入式GUI作为专用运行时环境的三层架构解析

FlyThings OS:嵌入式GUI作为专用运行时环境的三层架构解析

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

2026/10/19 1:04:11 阅读更多 →
STM32C5软件开发实战:从环境搭建到外设调试全流程

STM32C5软件开发实战:从环境搭建到外设调试全流程

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

2026/10/19 1:04:11 阅读更多 →
寄存器视角下的嵌入式外设配置:GPIO、定时器与中断实战

寄存器视角下的嵌入式外设配置:GPIO、定时器与中断实战

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

2026/10/19 1:04:11 阅读更多 →
树莓派3D打印外壳全攻略:45款模型选型、材料与散热设计

树莓派3D打印外壳全攻略:45款模型选型、材料与散热设计

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

2026/10/19 1:04:11 阅读更多 →
RV1106边缘端图像分类部署:四大轻量模型量化实测与选型指南

RV1106边缘端图像分类部署:四大轻量模型量化实测与选型指南

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

2026/10/19 1:03:10 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 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/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 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/18 0:55:02 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →