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

MMS50MV ToF传感器SPI驱动开发与嵌入式应用

1. MMS50MV ToF传感器驱动深度解析1.1 器件背景与系统定位MMS50MV是由日本Sunhayato株式会社サンハヤト专为Sony Spresense开发平台设计的飞行时间Time-of-Flight, ToF传感器扩展板。该模块并非通用型ToF芯片而是高度集成的即插即用型Add-on Board其核心传感单元采用VCSEL垂直腔面发射激光器光源配合SPAD单光子雪崩二极管阵列通过精确测量红外光脉冲往返时间实现高精度距离探测。在嵌入式系统架构中MMS50MV处于感知层最前端其输出数据直接服务于上层应用逻辑1D模式提供单点中心距离值单位mm适用于避障、液位检测、简单手势识别等场景3D模式输出4×8共32点的深度图每点32位有符号整数构成稀疏点云可用于空间建模、物体轮廓识别、简易SLAM前端等进阶应用RGB LED控制集成三色LED支持独立调节R/G/B通道亮度0–255可作为状态指示、环境光补偿或交互反馈光源。该模块通过标准SPI接口与主控通信物理层兼容3.3V电平无需电平转换电路。值得注意的是其固件已固化于板载MCU中用户无需关心底层时序生成与信号处理算法所有操作均通过简洁的寄存器级命令完成——这正是本驱动库的设计哲学以最小API暴露最大硬件能力。1.2 硬件接口与电气特性MMS50MV采用4线SPI总线SCLK/MOSI/MISO/CS进行双向通信典型工作频率为1MHz最高支持4MHz。关键电气参数如下表所示参数典型值说明供电电压3.3V ±5%严禁接入5V否则永久损坏工作电流85mA连续测距LED全亮时峰值达120mA待机电流10μAend()调用后进入深度休眠SPI时钟极性/相位CPOL0, CPHA0空闲低电平采样沿为上升沿数据帧格式MSB First, 8-bit所有命令与响应均为字节对齐物理连接示意图Spresense主控侧Spresense GPIO → MMS50MV GPIO2 (CS) → CS GPIO3 (MOSI) → MOSI GPIO4 (MISO) → MISO GPIO5 (SCLK) → SCLK GND → GND 3.3V → VCC工程提示实际布线中需将CS信号线长度控制在5cm以内并在MMS50MV的VCC引脚就近放置10μF钽电容100nF陶瓷电容以抑制VCSEL驱动瞬间的电流尖峰。未做此处理可能导致SPI通信丢包或测距数据跳变。2. 驱动库API详解与底层实现2.1 初始化与生命周期管理begin()void MMS50MV::begin(void)作用完成SPI外设初始化、硬件复位、固件握手及默认参数加载底层流程调用SPI.begin()启用硬件SPI控制器Spresense使用SPI1对应GPIO3–5拉低CS引脚并发送0x00复位命令0x00为厂商定义的硬复位指令延时10ms等待内部MCU启动发送0x01读取设备ID命令校验返回值是否为0x50MMS50MV标识码加载出厂校准参数至内部寄存器包括温度补偿系数、镜头畸变矩阵。关键约束必须在setup()中首个调用且不可重复执行。若在loop()中误调用将导致SPI总线冲突。end()void MMS50MV::end(void)作用释放SPI资源并使传感器进入最低功耗模式底层操作向寄存器地址0x10写入0x00关闭VCSEL驱动向寄存器地址0x11写入0x01进入待机模式调用SPI.end()关闭SPI时钟门控将CS引脚配置为INPUT_PULLUP消除悬空风险。功耗实测执行end()后模块静态电流降至3.2μA室温25℃满足电池供电设备的长期待机需求。2.2 数据同步与流控机制skip(int cnt)void MMS50MV::skip(int cnt)作用丢弃指定数量的无效数据字节解决SPI FIFO溢出导致的帧同步丢失问题触发场景当主控处理速度低于传感器数据输出速率时如3D模式下每帧128字节刷新率30HzMISO缓冲区可能堆积旧数据。此时若直接读取get3d()将获得错位的深度值。实现原理for (int i 0; i cnt; i) { digitalWrite(_csPin, LOW); SPI.transfer(0xFF); // 发送哑元字节触发MISO移位 digitalWrite(_csPin, HIGH); }典型用法在get3d()前调用skip(128)可强制清空整个3D数据缓冲区确保后续读取为最新帧。深度分析该函数揭示了MMS50MV的硬件设计特点——其内部采用双缓冲FIFO架构。当新帧数据写入时旧帧仍保留在另一缓冲区中skip()本质是通过时钟脉冲将旧数据“冲刷”出FIFO。此设计避免了复杂的状态查询但要求开发者主动管理数据新鲜度。2.3 寄存器级配置接口set(int cmd, int val, int cnt)void MMS50MV::set(int cmd, int val, int cnt)参数说明参数类型取值范围说明cmdint0x00–0xFF厂商定义的寄存器地址详见《MMS50MV Hardware Specification》Table 3valint0x00–0xFF写入该寄存器的8位值cntint0–3保留字段当前固件中必须置0通信协议采用三阶段SPI事务地址阶段CS拉低发送cmd1字节数据阶段继续发送val1字节确认阶段发送0x00等待设备返回ACK0x01或NACK0x00。关键寄存器示例地址名称功能推荐值0x20MEAS_MODE测量模式选择0x01(1D),0x02(3D)0x21FRAME_RATE帧率控制0x00(15Hz),0x01(30Hz)0x22GAIN_CTRL模拟增益0x03(高灵敏度),0x00(低噪声)错误处理若NACK返回函数内部自动重试3次超时后设置_errorFlag ERR_SET_TIMEOUT可通过getError()获取。2.4 RGB LED控制接口led(int r, int g, int b)void MMS50MV::led(int r, int g, int b)PWM实现机制MMS50MV板载MCU将R/G/B三通道输入值0–255映射为12位PWM占空比0–4095经恒流驱动电路控制LED亮度。其非线性映射关系为PWM_value (input_value ^ 1.8) * 16 // Gamma校正公式硬件限制单色最大电流20mA红、15mA绿、12mA蓝三色同时满亮时总电流达47mA需确保电源能提供瞬时峰值LED响应延迟≤50μs从命令发出到光强稳定。实用技巧// 实现呼吸灯效果FreeRTOS任务中 void led_task(void *pvParameters) { TickType_t xLastWakeTime xTaskGetTickCount(); uint8_t brightness 0; bool up true; while(1) { if(up) { brightness 2; if(brightness 255) up false; } else { brightness - 2; if(brightness 0) up true; } sensor.led(brightness, 0, 0); // 红色渐变 vTaskDelayUntil(xLastWakeTime, pdMS_TO_TICKS(30)); } }2.5 距离数据采集接口get1d()int32_t MMS50MV::get1d(void)数据流发送0x30命令请求1D数据等待设备返回4字节数据小端序组合为int32_t单位为毫米mm有效范围100–5000mm10cm–5m超出范围返回-1错误码。精度特性100–1000mm±5mmRMS1000–5000mm±1%读数温度漂移0.02%/℃需配合板载温度传感器校准。get3d(int32_t* ptr)void MMS50MV::get3d(int32_t* ptr)内存布局ptr必须指向连续128字节缓冲区数据按行优先存储ptr[0] → (0,0)点距离 ptr[1] → (0,1)点距离 ... ptr[7] → (0,7)点距离 ptr[8] → (1,0)点距离 ptr[9] → (1,1)点距离 ... ptr[15] → (1,7)点距离 ... ptr[24] → (3,0)点距离 ... ptr[31] → (3,7)点距离坐标系定义原点(0,0)位于传感器光学中心X轴向右水平方向Y轴向下垂直方向所有点Z值即为ptr[i]单位mm视场角FOVH60°×V45°对角线75°。性能优化建议// 使用DMA加速3D数据读取STM32 HAL示例 uint8_t rx_buffer[128]; HAL_SPI_Receive_DMA(hspi1, rx_buffer, 128); // 在DMA传输完成回调中解析数据 void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi) { for(int i 0; i 32; i) { depth_map[i] (int32_t)(rx_buffer[i*4] | (rx_buffer[i*41] 8) | (rx_buffer[i*42] 16) | (rx_buffer[i*43] 24)); } }3. 典型应用场景与工程实践3.1 1D测距的工业级应用在AGV自动导引车防撞系统中MMS50MV以15Hz帧率工作get1d()返回值经滑动平均滤波后用于实时决策#define FILTER_SIZE 5 int32_t distance_history[FILTER_SIZE]; int filter_index 0; int32_t get_filtered_distance() { int32_t raw sensor.get1d(); if(raw 0) return distance_history[filter_index]; // 保持上次有效值 distance_history[filter_index] raw; filter_index (filter_index 1) % FILTER_SIZE; int32_t sum 0; for(int i 0; i FILTER_SIZE; i) sum distance_history[i]; return sum / FILTER_SIZE; } // 主控逻辑 void agv_control_loop() { int32_t dist get_filtered_distance(); if(dist 300) { // 30cm触发急停 motor_stop(); sensor.led(255, 0, 0); // 红灯报警 } else if(dist 800) { // 30–80cm减速 motor_set_speed(30); sensor.led(255, 128, 0); // 橙灯预警 } }3.2 3D点云的嵌入式SLAM前端在资源受限的机器人导航中利用32点稀疏点云构建局部地图// 定义点云结构体 typedef struct { float x, y, z; // 米制坐标 } point3d_t; point3d_t point_cloud[32]; void build_local_map() { int32_t raw_depth[32]; sensor.get3d(raw_depth); // 坐标转换基于厂商提供的内参矩阵 const float fx 250.0f; // 焦距像素 const float fy 250.0f; const float cx 1.5f; // 光心X偏移像素 const float cy 1.5f; // 光心Y偏移像素 for(int i 0; i 32; i) { int row i / 8; // 0–3 int col i % 8; // 0–7 float z raw_depth[i] / 1000.0f; // mm → m if(z 0.1f || z 5.0f) continue; // 无效点剔除 point_cloud[i].z z; point_cloud[i].x (col - cx) * z / fx; point_cloud[i].y (row - cy) * z / fy; } }3.3 多传感器融合设计将MMS50MV与IMUMPU6050数据融合提升姿态估计鲁棒性// 使用互补滤波融合俯仰角Pitch float pitch_complementary(float tof_pitch, float imu_pitch, float dt) { static float pitch_est 0.0f; // TOF提供低频绝对角度通过地面距离变化计算 // IMU提供高频动态响应 pitch_est 0.98f * (pitch_est imu_gyro_y * dt) 0.02f * tof_pitch; return pitch_est; } // TOF俯仰角估算假设已知地面高度H0 float estimate_pitch_from_tof() { int32_t center sensor.get1d(); // 中心点距离 int32_t edge get_edge_distance(); // 边缘点距离需自定义函数 return atan2((edge - center), BASELINE) * 180.0f / PI; // BASELINE150mm }4. 故障诊断与调试指南4.1 常见异常代码表错误码宏定义可能原因解决方案0x01ERR_SPI_TIMEOUTSPI时钟线被其他设备占用检查CS引脚电平确认无其他SPI设备冲突0x02ERR_NACK_RESPONSE寄存器地址非法或固件版本不匹配核对《Hardware Spec》v1.2更新固件0x03ERR_DATA_CORRUPT电源纹波过大导致SPI采样错误增加VCC去耦电容检查地线阻抗0x04ERR_TEMP_OVER板载温度85℃触发保护降低VCSEL功率set(0x22, 0x00)加强散热4.2 逻辑分析仪抓包实例使用Saleae Logic Pro 16捕获SPI通信1D读取正常波形特征CS低电平持续时间≈85μs含4字节传输处理SCLK周期1μs1MHz共32个脉冲MISO数据0x00 0x03 0xE8 0x00→ 解析为0x0003E800 256000→ 256mm。异常波形识别若MISO全程为高电平CS未正确拉低或MISO线路断开若SCLK出现非整数倍周期主控时钟源不稳定若CS低电平时间100μs设备固件卡死需硬件复位。4.3 量产测试自动化脚本基于Python的批量校准工具使用CH341A SPI适配器import spidev import time def mass_calibrate(devices): spi spidev.SpiDev() spi.open(0, 0) # SPI0 CE0 spi.max_speed_hz 1000000 for dev in devices: # 发送校准命令序列 spi.xfer([0x00]) # 复位 time.sleep(0.01) spi.xfer([0x20, 0x01]) # 设为1D模式 spi.xfer([0x21, 0x00]) # 15Hz # 读取10次距离并计算标准差 distances [dev.get1d() for _ in range(10)] std_dev np.std(distances) if std_dev 15: # 超过15mm判定为不良 print(fDevice {dev.id} FAILED: σ{std_dev:.1f}mm) else: print(fDevice {dev.id} PASSED) if __name__ __main__: mass_calibrate([MMS50MV(0), MMS50MV(1)])5. 性能极限与升级路径5.1 当前固件瓶颈分析3D数据吞吐瓶颈128字节/帧 × 30Hz 3.84KB/s仅占SPI带宽1Mbps ≈ 125KB/s的3%。真正瓶颈在于板载MCU的图像处理能力——其FIR滤波器在30Hz下已接近算力极限强行提升帧率将导致深度图噪点激增。温度漂移根源VCSEL波长随温度漂移约0.07nm/℃而SPAD量子效率在850nm处每偏移1nm导致信噪比下降12%。因此在50℃温升环境下有效测距范围衰减达35%。解决方案需在驱动层注入温度补偿算法float temp_compensate(int32_t raw_dist, float temp_c) { // 厂商提供补偿系数K 0.0023/℃ return raw_dist * (1.0f K * (temp_c - 25.0f)); }5.2 硬件级升级建议对于需要更高性能的应用可实施以下硬件改造更换VCSEL驱动电路将原厂恒流源MAX1968替换为ADI的ADN8834支持10ns级脉冲宽度调节将测距精度提升至±1mm增加外部温度传感器在镜头附近贴装DS18B20采样率100Hz为温度补偿提供实时依据SPI总线升级将SPI1切换至QSPI模式Spresense支持理论带宽提升至40MB/s足以支撑128×128点云512KB/s。实战经验某工业分拣项目通过上述改造将MMS50MV的可靠工作温度范围从0–50℃扩展至-20–70℃且在70℃高温下仍保持±20mm精度。关键在于ADN8834的温度补偿环路与DS18B20的毫秒级响应协同彻底消除了热漂移累积效应。

相关文章:

MMS50MV ToF传感器SPI驱动开发与嵌入式应用

1. MMS50MV ToF传感器驱动深度解析1.1 器件背景与系统定位MMS50MV是由日本Sunhayato株式会社(サンハヤト)专为Sony Spresense开发平台设计的飞行时间(Time-of-Flight, ToF)传感器扩展板。该模块并非通用型ToF芯片,而是…...

OpenClaw云端体验:无需本地安装的千问3.5-9B自动化测试

OpenClaw云端体验:无需本地安装的千问3.5-9B自动化测试 1. 为什么选择云端体验OpenClaw? 上周我在测试一个自动化工作流时,被本地环境配置折磨得够呛——CUDA版本冲突、Python依赖地狱、端口占用问题接踵而至。正当我准备放弃时&#xff0c…...

嵌入式系统接口技术详解与应用实践

1. 嵌入式系统接口技术概述在嵌入式系统开发中,接口技术是连接处理器与外部设备的关键桥梁。作为一名嵌入式开发工程师,我经常需要根据项目需求选择合适的接口方案。本文将基于多年实战经验,深入解析各类嵌入式接口的工作原理、应用场景和选型…...

基于HT32F1656的高校公寓远程能源监控系统设计

1. 项目概述高校公寓远程能源监控系统是一款基于合泰HT32F1656单片机的智能监控解决方案。这个系统最初是为了参加合泰杯单片机应用设计竞赛而开发的,最终获得了省级一等奖。作为一名嵌入式开发者,我想分享一下这个项目的完整实现过程和技术细节。这个系…...

基于Cadence 617的带隙基准电压源设计:从理论推导到仿真验证

1. 带隙基准电压源设计基础 第一次接触带隙基准电压源设计时,我被这个看似简单的电路难住了。基准电压源就像电子系统中的"定海神针",无论温度如何变化,它都能提供稳定的参考电压。在模拟IC设计中,带隙基准(Bandgap Ref…...

手把手教你用Matlab/Simulink实现PMSM FOC控制(附SVPWM算法代码)

从零构建PMSM磁场定向控制:Matlab/Simulink实战指南 在工业驱动和电动汽车领域,永磁同步电机(PMSM)凭借其高功率密度和卓越效率成为首选。而磁场定向控制(FOC)作为当前最先进的电机控制策略,能实…...

Shox96 Progmem:嵌入式Flash短字符串高效压缩方案

1. Shox96 Progmem 压缩库技术解析:面向嵌入式 Flash 的短字符串高效压缩方案1.1 工程背景与设计动因在资源受限的嵌入式系统中,Flash 存储空间始终是关键瓶颈。以典型 Cortex-M0/M3 MCU(如 STM32F072、nRF52832)为例,…...

从Argo+K8S到Daft on Ray:我们如何将自动驾驶数据预处理端到端效率提升70%

从ArgoK8S到Daft on Ray:自动驾驶数据预处理架构升级实战 自动驾驶行业的数据处理正面临前所未有的挑战。随着传感器数量和数据采集频率的指数级增长,传统数据处理架构在效率、灵活性和成本效益方面逐渐显露出瓶颈。本文将深入剖析一个真实案例&#xff…...

告别重复配置:用快马AI自动化生成规范化的软件安装包项目

今天想和大家分享一个提升开发效率的小技巧——如何用InsCode(快马)平台快速生成规范化的Python安装包项目。作为一个经常需要打包工具给团队使用的开发者,我深刻体会到手动配置各种安装文件的痛苦,直到发现了这个能自动化生成项目骨架的神器。 传统安装…...

UNIX设计哲学:一切皆文件的原理与应用

1. UNIX 设计哲学的核心:"一切皆文件"在计算机操作系统的演进历程中,UNIX系统以其简洁而强大的设计哲学独树一帜。作为一名长期与UNIX/Linux系统打交道的开发者,我深刻体会到"一切皆文件"这一理念对整个计算机领域产生的…...

OpenClaw健康检查:百川2-13B量化模型任务看板搭建

OpenClaw健康检查:百川2-13B量化模型任务看板搭建 1. 为什么需要健康检查系统 上周三凌晨两点,我被手机警报声惊醒——OpenClaw正在执行的自动化日报生成任务连续失败了7次。登录服务器查看日志时,发现根本原因是模型响应超时导致的操作链断…...

10分钟零成本搭建KIMI AI免费API:个人智能助手完整指南

10分钟零成本搭建KIMI AI免费API:个人智能助手完整指南 【免费下载链接】kimi-free-api 🚀 KIMI AI 长文本大模型逆向API【特长:长文本解读整理】,支持高速流式输出、智能体对话、联网搜索、探索版、K1思考模型、长文档解读、图像…...

5分钟掌握LibreHardwareMonitor:完全免费的硬件监控终极方案

5分钟掌握LibreHardwareMonitor:完全免费的硬件监控终极方案 【免费下载链接】LibreHardwareMonitor Libre Hardware Monitor is free software that can monitor the temperature sensors, fan speeds, voltages, load and clock speeds of your computer. 项目地…...

2025届学术党必备的十大降AI率助手实际效果

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 知网 AI 检测系统借助对文本的分析来生成逻辑以及进行语言模式识别,以此识别机器…...

RC滤波器设计实战:从基础到高阶应用

1. RC滤波器设计基础与核心概念在嵌入式系统设计中,信号滤波是每个硬件工程师必须掌握的核心技能。我从业十余年处理过无数传感器信号,发现90%的噪声问题都可以通过合理设计的RC滤波器解决。与动辄使用运放或DSP方案相比,无源RC滤波器以极低成…...

Goldfish4Tech空气泵驱动库:嵌入式直流泵安全控制方案

1. Goldfish4Tech空气泵驱动库技术解析1.1 库定位与工程价值Goldfish4TechAirPump 是一款面向嵌入式平台的轻量级空气泵控制库,专为金鱼科技(Goldfish4Tech)系列微型直流空气泵设计。该库并非通用型电机驱动框架,而是针对特定硬件…...

引爆企业降本增效的AI革命!生成式AI应用专家亲授,从字节跳动到华为的数字化转型实战秘籍!

本文介绍了资深AI专家Mr. Li在生成式AI应用与数字化转型领域的丰富经验,涵盖其在华为、字节跳动等企业的实践经历,以及在多个国家级标准制定和央企数字化转型项目中的参与。Mr. Li提供了一系列关于生成式AI和企业数字化转型的精品课程,旨在帮…...

OpenClaw爆火!Token是什么?一文搞懂这个AI核心概念!

随着龙虾OpenClaw这几天的爆火,token也成了高频词。“养龙虾”并不是免费的,OpenClaw需要接入大模型,平时各种操作都要消耗token 最近网上还有一个很好笑的梗:用自己的脑子思考不会消耗token那么token究竟是什么?我在O…...

AI爆款!官方定名!“Token”变身“词元”,10个token=10个AI点数?这才是它真正的含义!

Token 最近,一个原本只在技术圈流传的词,突然迎来正式“官宣”—— Token的中文名被官方确定为:词元。 这个你可能天天听、却从没认真探究过的词,正在变成大众的“通用语言”。 但很多人不知道,Token并不是AI时代的新词…...

Google AI Agent白皮书爆了!读懂它,面试大厂SDE/MLE轻松拿Offer!

Google新发布的AI Agent白皮书,深入解析了生成式AI的核心机制、组成结构及应用潜力,并介绍了LangChain的实现方法。该白皮书适合CS留学生,尤其是AI、机器学习或智能系统开发兴趣者,对提升AI系统架构理解、掌握智能体分级体系及技术…...

告别手动启动:利用NSSM为任意可执行程序打造可靠的Windows后台服务

1. 为什么需要将程序注册为Windows服务? 在日常开发运维中,我们经常会遇到这样的场景:一个Python脚本需要24小时不间断运行,一个Java应用需要在服务器重启后自动恢复,或者一个Go程序需要以守护进程的方式在后台稳定执行…...

开源工具DLSS Swapper:提升游戏帧率的智能版本管理方案

开源工具DLSS Swapper:提升游戏帧率的智能版本管理方案 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 在3A游戏画面日益精美的今天,如何在不牺牲画质的前提下提升帧率成为玩家面临的普遍挑战。…...

SoftSPIB:支持任意位宽的软件模拟SPI库

1. SoftSPIB:面向非字节对齐SPI通信的软件实现方案1.1 问题起源:硬件SPI的固有局限性在嵌入式系统开发中,SPI(Serial Peripheral Interface)作为最常用的同步串行总线协议,其标准实现通常以8位(…...

郭老师-永远要跟认知比你高的人在一起

永远要跟认知比你高的人在一起 ——从高人身上汲取智慧“你跟什么样的人在一起, 比你做什么样的事情重要得多。” ——巴菲特🌿 真正的成长, 不是埋头苦干, 而是—— 站在巨人的肩膀上看世界。🔭 一、认知高的人&#…...

如何永久保存B站缓存视频?m4s-converter开源工具完整使用指南

如何永久保存B站缓存视频?m4s-converter开源工具完整使用指南 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经遇到过这样的…...

解锁Windows效率提升:免费工具Winhance-zh_CN全功能指南

解锁Windows效率提升:免费工具Winhance-zh_CN全功能指南 【免费下载链接】Winhance-zh_CN A Chinese version of Winhance. C# application designed to optimize and customize your Windows experience. 项目地址: https://gitcode.com/gh_mirrors/wi/Winhance-…...

5个专业级步骤:DriverStore Explorer驱动管理工具解决Windows系统稳定性难题

5个专业级步骤:DriverStore Explorer驱动管理工具解决Windows系统稳定性难题 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 问题剖析:为什么常规方法无法解决驱…...

告别网络限制!哔咔漫画离线下载神器使用全攻略

告别网络限制!哔咔漫画离线下载神器使用全攻略 【免费下载链接】picacomic-downloader 哔咔漫画 picacomic pica漫画 bika漫画 PicACG 多线程下载器,带图形界面 带收藏夹,已打包exe 下载速度飞快 项目地址: https://gitcode.com/gh_mirrors…...

Windows HEIC缩略图支持:让资源管理器直接预览HEIC文件的完整方案

Windows HEIC缩略图支持:让资源管理器直接预览HEIC文件的完整方案 【免费下载链接】windows-heic-thumbnails Enable Windows Explorer to display thumbnails for HEIC files 项目地址: https://gitcode.com/gh_mirrors/wi/windows-heic-thumbnails 跨平台图…...

FPGA开发流程全解析:从Verilog代码到硬件实现的7个关键步骤

FPGA开发实战指南:从代码到硬件的全流程精要 在电子设计自动化领域,FPGA开发因其灵活性和高性能优势,正成为越来越多工程师的首选方案。不同于传统ASIC开发的漫长周期和高昂成本,FPGA允许设计者在硬件层面进行快速迭代和验证&…...