news 2026/8/1 23:30:50

GD32W51x TSI触摸与CAU加密硬件协同设计实战解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GD32W51x TSI触摸与CAU加密硬件协同设计实战解析

1. 项目缘起:为什么需要关注GD32W51x的TSI与CAU?

最近在做一个智能门锁的项目,主控选型时,客户提了一个硬性要求:必须支持电容式触摸感应,并且要有硬件级的加密引擎来保护密钥和通信。市面上很多MCU要么只有触摸功能,要么只有加密协处理器,两者兼备且性价比合适的,还真不多。在翻看GD32的选型手册时,GD32W51x系列进入了我的视线,尤其是它集成的TSI(Touch Sensing Interface)模块和CAU(Cryptographic Acceleration Unit)加密处理器,简直就是为这类“安全+交互”的应用量身定制的。

很多朋友可能对GD32的W系列还比较陌生,它主打的是无线连接(Wi-Fi 6 & BLE 5.2),但W51x系列在无线之外,还塞进了这两个非常实用的“硬核”外设。TSI模块让你无需外挂触摸芯片,就能实现高可靠性的电容触摸按键、滑条和滚轮;而CAU单元则提供了从AES、DES到SHA、HMAC乃至公钥算法(RSA/ECC)的硬件加速,把最耗时的加解密运算从CPU手里接过来,既提升了系统效率,又增强了安全性。

这篇文章,我就结合自己的评估和测试过程,来深挖一下GD32W51x里这两个模块的细节。我会重点讲清楚它们的工作原理、配置方法、在实际应用中容易踩的坑,以及如何让它们协同工作。如果你也在为智能家居、安防设备、工业HMI等需要安全触摸交互的产品选型,希望这篇详尽的解析能给你带来直接的参考价值。

2. TSI模块深度解析:从电容原理到稳定触控

TSI,全称Touch Sensing Interface,本质上是一个集成了驱动与检测电路的电容传感器接口。它的目标很明确:用最少的硬件和软件开销,实现稳定、抗干扰的电容触摸功能。

2.1 TSI的工作原理与核心架构

GD32W51x的TSI模块,其核心思想是电荷转移测量法。简单来说,就是通过一个已知的参考电容(Cref)和待测的电极电容(Cx,包含手指触摸带来的变化量)之间进行电荷的充放电和重新分配,通过测量电荷转移后产生的电压变化,来反推出Cx的变化,从而检测触摸事件。

模块内部主要包含以下几个关键部分:

  • 驱动信号发生器:产生用于给电容充电的方波信号。频率和占空比可调,这是抗干扰设计的关键。
  • 模拟前端(AFE):包含运算放大器、积分器等,负责将微小的电容变化量转换为可测量的电压信号。
  • 模拟多路复用器(MUX):允许单个TSI模块分时复用多个触摸通道(比如多个按键或一个滑条的多段电极)。
  • 采样保持与ADC:将AFE输出的模拟电压进行采样,并通过内置的ADC转换为数字值,这个值我们称之为“原始计数值”。
  • 数字控制逻辑与滤波器:负责整个测量序列的时序控制,并内置了数字滤波器(如中值滤波、均值滤波)来平滑原始数据,抑制突发噪声。

整个测量周期可以概括为:预充电 -> 电荷转移 -> 电压采样 -> ADC转换 -> 数字滤波。TSI模块的巧妙之处在于,它通过硬件自动完成了这个循环,CPU只需要在配置好后,定期去读取滤波后的计数值即可,大大减轻了软件负担。

2.2 关键配置参数与抗干扰设计

要让TSI工作稳定,尤其是在电磁环境复杂的场合(比如靠近电机、开关电源),配置是关键。以下是我在调试中总结的几个核心寄存器配置点:

  1. 时钟与预分频:TSI模块的工作时钟来源于APB总线。过高的时钟频率可能导致驱动信号边沿过陡,辐射噪声增大;过低则会影响扫描速度。需要根据PCB布局和灵敏度要求折中。通常,我会从系统主频的几分之一开始尝试。
  2. 驱动电流与电极电阻:TSI模块可以配置驱动管的电流强度。电流越大,充放电速度越快,抗传导噪声能力越强,但功耗也越高。同时,必须注意在触摸电极的串联电阻(通常用于ESD保护)不能太大,否则会严重限制充电电流,导致信号弱。我的经验是,这个电阻一般不超过1KΩ。
  3. 采样次数与硬件滤波:这是抑制随机噪声的第一道防线。GD32W51x的TSI允许设置多次采样(如4、8、16次)然后取平均值。对于有低功耗要求的应用,可以适当减少次数;对于追求稳定性的应用,建议开启最大值。
  4. 频率跳频:这是对抗特定频率干扰(如50Hz工频及其谐波)的“杀手锏”。TSI模块可以在几个预设的驱动频率之间伪随机切换,这样任何固定频率的干扰都只会影响部分扫描周期,经过平均滤波后,其影响被大幅削弱。强烈建议在可能受到电源干扰的环境下开启此功能。

一个典型的初始化代码框架如下(以GigaDevice提供的HAL库为例):

void tsi_configuration(void) { // 1. 使能TSI和GPIO时钟 rcu_periph_clock_enable(RCU_TSI); rcu_periph_clock_enable(RCU_GPIOA); // 配置GPIO为模拟模式,用于触摸通道 gpio_mode_set(GPIOA, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO_PIN_0); // 2. 复位并配置TSI模块 tsi_deinit(); tsi_parameter_struct tsi_init_struct; // 设置驱动电流、预分频、采样次数等 tsi_init_struct.drive_current = TSI_DRIVING_CURRENT_4MA; tsi_init_struct.prescaler = TSI_CLK_PRESCALER_DIV8; tsi_init_struct.sampling_number = TSI_SAMPLING_8; tsi_init_struct.frequency_hop_enable = ENABLE; // 开启频率跳频 tsi_init_struct.filter_type = TSI_FILTER_MOVING_AVERAGE; // 移动平均滤波 tsi_init_struct.filter_window = 4; // 滤波窗口大小 tsi_init_struct.channel_enable = TSI_CHANNEL_0_ENABLE; // 使能通道0 (PA0) tsi_init_struct.interrupt_enable = DISABLE; // 先不用中断,轮询 tsi_init(TSI, &tsi_init_struct); // 3. 校准与基准值获取 tsi_calibration_mode_enable(TSI, ENABLE); delay_ms(100); // 等待校准完成 tsi_calibration_mode_enable(TSI, DISABLE); // 读取无触摸时的基准值 uint16_t baseline = tsi_channel_data_read(TSI, TSI_CHANNEL_0); // 将基准值存储起来,用于后续判断 }

2.3 软件处理:基准值、阈值与触摸判决

硬件配置好了,数据也读出来了,但怎么判断“摸”还是“没摸”?这才是软件算法的核心。一个健壮的触摸检测通常包含以下步骤:

  1. 动态基准跟踪:环境温湿度、电源电压的缓慢变化会影响电容基准值。我们不能用一个固定的“基准值”,而必须让它能缓慢地跟随环境变化。常用方法是设置一个“基线”(Baseline),它以一个非常慢的速度(例如,每100次扫描更新一次)向当前原始值靠拢,但一旦检测到可能的触摸(原始值快速上升),基线就停止更新。

  2. 差值计算与低通滤波Delta = RawData - Baseline。这个Delta值才是真正反映手指触摸引起的信号变化。为了进一步平滑,可以对Delta值进行一阶低通滤波:FilteredDelta = α * CurrentDelta + (1-α) * PreviousFilteredDelta,其中α是一个介于0和1之间的系数(如0.1),用于控制平滑程度。

  3. 阈值比较与去抖:设置一个“触摸阈值”(Touch Threshold)和一个“释放阈值”(Release Threshold),且释放阈值通常低于触摸阈值,形成迟滞,防止在阈值附近抖动。

    • FilteredDelta > TouchThreshold并持续一段时间(如3-5个扫描周期),则判定为“触摸按下”。
    • FilteredDelta < ReleaseThreshold并持续一段时间,则判定为“触摸释放”。
    • 这个“持续一段时间”就是软件去抖,能有效防止因噪声引起的误触发。
  4. 灵敏度与响应速度的权衡:阈值设得低,灵敏度高,但更容易误触发;去抖时间长,稳定性好,但响应变慢。这需要根据具体应用(是快速滑条还是普通按键)来调整。对于滑条和滚轮,还需要在多个通道间做插值计算,以得到更精细的位置信息。

踩坑心得:最大的坑往往在PCB设计阶段就埋下了。触摸电极的走线要尽量短,且必须被接地屏蔽层(Guard Ring)包围,以抑制来自其他数字信号线的耦合干扰。电极的形状和面积也直接影响灵敏度和一致性,需要严格按照芯片数据手册的推荐来设计。我曾因为Guard Ring没处理好,导致某个按键在特定环境下始终有底噪,调试了很久。

3. CAU加密处理器全揭秘:硬件加速的安全基石

如果说TSI关乎产品的“体验”,那么CAU就关乎产品的“生命”——安全。GD32W51x的CAU是一个功能相当全面的对称/非对称加密硬件加速器,其设计目标就是解放CPU,让复杂的密码学运算在专用硬件中高效、安全地完成。

3.1 CAU支持的核心算法与工作模式

CAU模块支持以下几大类算法,基本覆盖了物联网设备的主流安全需求:

算法类别具体算法典型应用场景
对称加密AES-128/192/256数据加密、TLS/DTLS记录层加密、固件加密
DES/TDES兼容旧有协议(不推荐新设计使用)
散列算法SHA-1, SHA-224, SHA-256数据完整性校验、数字签名
MD5(通常仅用于兼容)同上(安全性弱,不推荐用于安全目的)
消息认证码HMAC (基于SHA)消息来源认证、密钥派生
公钥算法RSA (加密/解密,签名/验证)TLS握手、设备身份认证
ECC (ECDSA签名/验证, ECDH密钥交换)同等安全强度下,比RSA更节省资源和带宽,非常适合物联网

对于AES和DES/TDES,CAU支持ECB、CBC、CTR等多种工作模式。对于SHA和HMAC,支持一次性处理大量数据。公钥算法则由独立的PKU(Public Key Unit)子模块处理,支持大数模幂、模乘等核心运算。

3.2 数据流与典型使用流程

以最常用的AES-CBC加密为例,展示CAU的数据处理流程:

  1. 初始化与密钥配置:这是最关键且敏感的一步。密钥必须被写入CAU的密钥寄存器。

    • 关键点:GD32的CAU提供了密钥保护机制。你可以选择将密钥直接由CPU写入,也可以利用芯片的硬件真随机数生成器(RNG)生成一个临时密钥。对于长期使用的根密钥,强烈建议在芯片生产时,通过安全烧录的方式写入OTP(一次性可编程)区域或Flash的安全存储区,并在运行时由CAU从该区域加载,而不是由应用程序明文传递。
    // 示例:配置AES-128密钥和初始化向量(IV) cau_deinit(CAU); cau_init(CAU, CAU_ENCRYPT, CAU_ALGO_AES, CAU_MODE_CBC); // 写入密钥 (此处为示例,实际密钥应从安全存储区加载) uint8_t aes_key[16] = {...}; cau_key_init(CAU, CAU_KEY_128B, aes_key, 16); // 写入CBC模式的初始化向量 uint8_t iv[16] = {...}; cau_iv_init(CAU, iv, 16);
  2. 数据输入与触发:将待加密的明文数据块(16字节对齐)写入CAU的数据输入寄存器(DIN)。可以通过查询状态寄存器或使用中断的方式,等待CAU准备好接收下一组数据。

  3. 硬件加速运算:一旦数据就绪,CAU内部的硬件电路开始执行加密流水线操作。这个过程完全由硬件完成,CPU可以去做其他任务,或者通过轮询/中断等待完成。

  4. 结果输出:运算完成后,从CAU的数据输出寄存器(DOUT)读取密文结果。

    // 加密一个数据块 uint8_t plaintext[16] = {...}; uint8_t ciphertext[16]; cau_data_write(CAU, plaintext, 16); // 写入明文 while(cau_flag_get(CAU, CAU_FLAG_BUSY) != RESET); // 等待操作完成 cau_data_read(CAU, ciphertext, 16); // 读取密文

对于非对齐或长数据,需要软件进行分块和填充(如PKCS#7)。

3.3 安全最佳实践与性能考量

  1. 密钥管理是核心

    • 永远不要硬编码密钥:这是最低级也最危险的安全错误。
    • 利用芯片安全特性:GD32W51x提供了Flash读保护、写保护、安全启动选项。将密钥存储在使能了读保护的Flash区域,能防止通过调试接口(如JTAG/SWD)直接读取。
    • 会话密钥动态生成:使用CAU的RNG或通过ECDH密钥交换协议,为每次会话生成唯一的临时密钥。
  2. 侧信道攻击防护:虽然CAU是硬件实现,比软件库更能抵抗时序攻击,但在系统层面仍需注意。确保加解密操作期间功耗相对稳定,避免在安全运算时处理其他高优先级中断,以减少因执行时间差异导致的信息泄漏。

  3. 性能对比:为了直观感受CAU的加速效果,我做了个简单测试:在GD32W51x上,用CAU硬件AES和纯软件AES库(如TinyAES)分别加密1KB数据。

    • 软件AES:耗时约5200 us(CPU主频 120MHz)。
    • CAU硬件AES:耗时约280 us性能提升超过18倍!对于需要频繁进行TLS握手或数据加密的应用,这个差距直接决定了用户体验和功耗。
  4. 与无线协议栈的协同:GD32W51x的Wi-Fi和BLE协议栈本身已经集成了TLS/DTLS和安全连接管理。CAU作为底层硬件加速器,通常被协议栈的中间件层直接调用。在开发时,我们更多是通过配置协议栈的安全选项(如选择加密套件)来间接使用CAU,这大大简化了开发难度。但了解其底层原理,对于调试复杂的安全连接问题至关重要。

4. TSI与CAU的协同应用实战:以智能门锁为例

理论讲完了,我们来看一个具体的实战场景:一个基于GD32W51x的智能门锁。它需要触摸密码面板输入,并通过Wi-Fi与手机App进行安全通信。

4.1 系统架构与任务划分

整个系统的软件可以划分为几个主要任务:

  • TSI扫描任务:一个低优先级的周期性任务,负责扫描所有触摸按键和滑条,更新原始数据,运行触摸检测算法,并将识别出的“按键事件”(如按下、释放、长按)放入事件队列。
  • 用户界面任务:从中断或事件队列中获取触摸事件,更新LCD/LED显示,处理用户输入逻辑(如密码输入、菜单切换)。
  • 网络通信任务:处理Wi-Fi连接,维护与云服务器或手机App的MQTT/HTTP连接。此任务会大量调用CAU进行TLS握手和数据加解密。
  • 安全服务任务(可选):一个高安全等级的任务,专门负责密钥管理、证书存储、触发CAU进行安全运算等。

4.2 关键交互点与数据流

  1. 密码输入与本地验证

    • 用户在TSI触摸面板上输入密码。
    • 用户界面任务收集密码数字,并生成一个待验证的密码哈希(例如,使用CAU计算SHA-256)。注意,比较的应该是哈希值,而不是明文密码
    • 从Flash安全存储区读取预先存储的、经过加盐处理的正确密码哈希值。
    • 调用CAU进行哈希值比对(常数时间比较,防止时序攻击)。验证通过后,触发开锁动作。
  2. 安全通信建立

    • 网络通信任务需要与服务器建立TLS连接。
    • 在TLS握手阶段,协议栈会调用CAU进行大量的非对称加密运算(如RSA签名验证或ECDH密钥交换)。
    • 握手完成后,通信数据会使用协商出的对称密钥(如AES-128-GCM),由CAU进行高速的加密/解密和完整性校验。
    • 这里的一个优化点:确保TLS库(如mbedTLS)已正确适配GD32的CAU硬件加速引擎。通常需要实现对应的mbedtls_xxx_xxx硬件加速回调函数,将算法调用指向CAU驱动。
  3. 固件安全升级

    • 服务器下发经过签名的加密固件包。
    • 设备端先使用CAU的ECC模块验证固件签名,确认真实性和完整性。
    • 验证通过后,再使用CAU的AES模块解密固件数据,写入到Flash的更新区域。
    • 最后,校验新固件的哈希值,并跳转执行。

4.3 资源冲突与中断管理

TSI和CAU是两个独立的外设,但它们共享系统总线(AHB/APB)和可能的中断源。在设计时需要特别注意:

  • 总线带宽:CAU在进行大数据量加解密时,会持续通过DMA或CPU读写数据,占用总线带宽。如果此时TSI也需要高频扫描,可能会互相影响。解决方法是合理规划两者的工作时段,或者为CAU的数据传输配置专用DMA通道,减少CPU干预和总线争用。
  • 中断优先级:CAU运算完成中断和TSI扫描完成中断的优先级需要仔细设置。通常,网络通信的实时性要求更高,因此CAU的中断优先级应高于TSI。但也要避免CAU长时间占用CPU导致TSI响应迟钝,影响触摸体验。可以采用“TSI低优先级中断+轮询”和“CAU高优先级中断+DMA”的组合策略。
  • 功耗管理:在电池供电的门锁中,功耗至关重要。TSI可以配置为低扫描频率,并在无触摸一段时间后进入休眠模式,由硬件定时器或RTC唤醒。CAU则在需要时才使能,运算完成后立即关闭。GD32W51x的低功耗模式需要配合外设时钟门控来使用,确保不用的模块彻底断电。

5. 开发调试与常见问题排查

即使理解了原理,实际调试中还是会遇到各种问题。下面分享几个我遇到过的典型问题及排查思路。

5.1 TSI模块调试:信号弱、不稳定、误触发

问题现象:触摸响应不灵敏,或者在没有触摸时偶尔会误触发。

排查步骤

  1. 测量原始信号:这是第一步,也是最重要的一步。在初始化TSI后,连续打印出目标通道的原始计数值(RawData)。观察以下情况:

    • 基准值是否合理?通常在几千到几万之间(取决于配置和PCB)。如果值异常低(如几百),可能是驱动电流太小、电极电容太小或走线断路。
    • 信号噪声大吗?在没有触摸时,RawData应该在很小范围内波动(比如±10以内)。如果波动超过几十甚至上百,说明噪声很大。
    • 触摸信号增量(Delta)够大吗?可靠触摸的Delta值至少应该是噪声峰峰值的5-10倍。如果Delta太小,需要提高灵敏度。
  2. 检查硬件设计

    • PCB布局:触摸电极周围是否有完整的Guard Ring?Guard Ring是否良好接地?触摸走线是否远离高频数字信号线(如时钟、USB、PWM)?最好能单独提供一层接地层在触摸传感器下方。
    • 覆盖介质:玻璃或亚克力盖板的厚度和材质是否符合要求?通常厚度建议在3mm以内,材质介电常数要稳定。
    • 电源质量:给MCU和触摸传感器的电源是否干净?可以在电源引脚附近增加滤波电容。TSI模块对电源噪声比较敏感。
  3. 调整软件参数

    • 增加采样次数和滤波强度:这是最直接的软件抗噪手段。
    • 开启频率跳频:对工频干扰特别有效。
    • 优化阈值和去抖时间:适当提高触摸阈值,增加去抖的稳定周期数。
    • 实现更智能的基线算法:确保基线能跟踪环境慢变,但在触摸发生时立即冻结。

5.2 CAU模块调试:运算错误、性能不达预期

问题现象:CAU运算返回错误标志,或者加解密速度感觉没有明显提升。

排查步骤

  1. 检查初始化序列:CAU模块在使用前必须正确复位和初始化。确保严格按照参考手册的顺序操作:时钟使能 -> 复位 -> 配置模式/算法 -> 写入密钥/IV -> 写入数据。
  2. 核对数据对齐与长度:对于AES等块算法,输入数据长度必须是块大小的整数倍(如AES是16字节)。如果不是,需要软件进行填充(Padding)。很多错误是因为数据指针未对齐或长度不对。
  3. 验证密钥和IV:确保写入CAU密钥寄存器的数据是正确的。对于CBC等模式,每次加密的IV需要是随机且不可预测的,解密时需要使用相同的IV。
  4. 确认时钟配置:CAU模块有自己的时钟域,需要确认其时钟源(通常是APB)已正确使能,且频率符合数据手册要求。时钟太慢会直接影响性能。
  5. 性能分析
    • 如果感觉加速不明显,首先要对比的是纯软件库的实现。确保你对比的软件库是经过优化的,而不是一个非常低效的教学实现。
    • 使用示波器或系统滴答定时器精确测量运算时间。注意区分单次运算时间包含数据搬运、函数调用开销的总时间。对于小数据块,后者的开销占比可能很大,导致加速比不明显。CAU的优势在大数据量处理上才能完全体现。
    • 检查是否启用了DMA来搬运CAU的输入/输出数据。对于连续的数据流,使用DMA能极大解放CPU,提升整体吞吐量。

5.3 系统集成问题:功能冲突、死机

问题现象:单独测试TSI和CAU都正常,但一起工作时系统会卡死或功能异常。

排查思路

  1. 中断风暴:检查TSI和CAU的中断服务程序(ISR)。ISR执行时间是否过长?是否在ISR中进行了耗时的操作(如打印日志)?这可能导致其他中断被延迟或丢失,造成系统逻辑错乱。优化ISR,只做最必要的标志位设置和数据搬运,复杂处理放到主循环或任务中。
  2. 栈溢出:CAU运算或TSI滤波可能会使用较大的局部数组。如果这些操作在中断或高优先级任务中,可能导致栈空间不足。检查链接脚本中分配的栈大小,并考虑使用静态或全局数组来替代大型局部变量。
  3. 资源锁竞争:如果多个任务都需要访问CAU(比如一个任务在加密,另一个任务要验签),需要实现一个互斥锁(Mutex)机制来序列化对CAU的访问,因为CAU的寄存器上下文是单一的,不能并发操作。
  4. 电源完整性:当CAU全速运算时,芯片的瞬时电流可能会比较大,如果电源电路设计不佳,可能引起电压跌落,导致TSI模块或其他数字逻辑工作不稳定。确保电源走线足够宽,去耦电容(特别是高频去耦电容)靠近芯片电源引脚放置。

调试这类复杂系统,逻辑分析仪和调试器是必不可少的。可以观察关键GPIO的波形来了解任务调度时序,使用调试器的实时变量观察功能来监控TSI的原始数据和CAU的状态寄存器。耐心地隔离问题,从最简单的配置开始,逐步增加功能,是解决问题的有效方法。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/1 23:30:38

TTL转RS232模块原理、设计与实战:从MAX232芯片到工业设备调试

1. 项目缘起&#xff1a;为什么TTL转RS232在今天依然重要&#xff1f;最近在折腾一台老旧的工业控制设备&#xff0c;它的调试接口是标准的RS232 DB9母头。当我兴冲冲地拿出笔记本电脑准备连接时&#xff0c;才猛然发现一个尴尬的现实&#xff1a;我的电脑&#xff0c;以及身边…

作者头像 李华
网站建设 2026/8/1 23:30:18

如何使用Gata Auto Bot自动完成Gata DVA任务?新手入门完整指南

如何使用Gata Auto Bot自动完成Gata DVA任务&#xff1f;新手入门完整指南 【免费下载链接】Gata-Auto-Bot Automation bot for Gata Data Verification Agent (DVA) tasks. This bot helps automate the process of completing DVA tasks on the Gata platform. 项目地址: …

作者头像 李华
网站建设 2026/8/1 23:26:22

FFUF终极指南:快速Web模糊测试工具完整教程

FFUF终极指南&#xff1a;快速Web模糊测试工具完整教程 【免费下载链接】ffuf Fast web fuzzer written in Go 项目地址: https://gitcode.com/gh_mirrors/ff/ffuf FFUF&#xff08;Fuzz Faster U Fool&#xff09;是一款基于Go语言开发的快速Web模糊测试工具&#xff0…

作者头像 李华
网站建设 2026/8/1 23:24:02

Hyper-V设备直通终极指南:3分钟完成GPU虚拟化分配的简单方法

Hyper-V设备直通终极指南&#xff1a;3分钟完成GPU虚拟化分配的简单方法 【免费下载链接】DDA 实现Hyper-V离散设备分配功能的图形界面工具。A GUI Tool For Hyper-Vs Discrete Device Assignment(DDA). 项目地址: https://gitcode.com/gh_mirrors/dd/DDA 还在为复杂的…

作者头像 李华
网站建设 2026/8/1 23:22:42

终极Sketchfab模型下载方案:3分钟快速解锁3D资源下载秘籍

终极Sketchfab模型下载方案&#xff1a;3分钟快速解锁3D资源下载秘籍 【免费下载链接】sketchfab sketchfab download userscipt for Tampermonkey by firefox only 项目地址: https://gitcode.com/gh_mirrors/sk/sketchfab 还在为Sketchfab上精美的3D模型只能在线预览而…

作者头像 李华