APM32芯得EP.51|基于APM32F407制作I2CEEPROM的MDK-Keil下载算法

极海Geehy 2025-04-10 18:19


《APM32芯得》系列内容为用户使用APM32系列产品的经验总结,均转载自21ic论坛极海半导体专区,全文未作任何修改,未经原文作者授权禁止转载。





前言

最近在做的一个项目中,需要经常把一些参数下载到I2C EEPROM中,然后MCU上电去读取。如果在产品量产过程中,可以使用烧录治具往EEPROM写入一次即可。但是在调试开发阶段,需要经常修改这些数据,调试起来非常不方便。


我调试的环境是MDK-Keil,于是网上了解了下如何制作Keil的下载算法,下面介绍下基于APM32F407如何制作I2C EEPROM(AT24C02型号)的Keil下载算法,这样在我们下载代码时可以一键把数据烧录到EEPROM中。


对于 Keil 的下载算法文件相关的详细介绍可以到官方在线文档进行了解,这些文档详细介绍了下载算法的实现细节。文档链接如下:


https://open-cmsis-pack.github.io/Open-CMSIS-Pack-Spec/main/html/flashAlgorithm.html


1. Keil如何调用下载算法


Keil的下载算法,我的理解就是可以通过Keil去调用该下载算法,然后可以去编程各种存储设备,比如MCU内部的Flash,通过MCU外设连接外扩的SPI Flash或者I2C EEPROM等器件。


要想通过Keil IDE的下载按钮一键编程这些存储设备,那么需要有对应器件的下载算法才能去编程。对于Keil来说通过调试界面指定相应的下载算法 xxx.FLM 文件,然后就可以被调用了,如下图:


‍‍Keil 在调试下载阶段,会把算法文件加载到芯片的内部 RAM 里面,加载的芯片内部的RAM地址和大小可以在上面的配置截图进行设置。然后就可以在 RAM 中执行这个下载算法文件的擦除、编程等函数,从而实现对存储设备下载程序或者在调试阶段读取数据等操作。


大致流程如下图:‍‍

主要是分为两步:


  • 通过SWD/JTAG调试接口,把下载算法加载到RAM。

  • 执行下载算法的擦除、编程等函数,从而对内部Flash进行编程或者通过MCU的片上外设对外扩的SPI FLASH/I2C EEPROM执行编程操作。


另外,前面说到会把下载算法文件加载到 RAM 运行,而且我们可以设置加载到任何的 RAM 地址运行,那么对下载算法生成的代码必须是与位置无关的代码,这样才能加载到任意 RAM 地址运行。


2.Keil下载算法函数和执行流程


2.1 下载算法需要实现哪些函数

根据官方文档介绍,要制作一个新的下载算法需要实现函数有:

一共有7个函数,而且这些函数的原型已经规定好了的,只需要我们根据不同的存储设备实现具体的功能即可。


其中有 mandatory 修饰的函数,是制作一个新的下载算法必须要实现的函数是,而 optional 修饰的函数则可根据需要实现还是不实现。


2.2 擦除流程


  • 加载算法到芯片 RAM。

  • 执行初始化函数 Init。

  • 执行擦除操作。其中擦除操作会根据Keil的配置选项,选择是擦除整个芯片还是扇区擦除。

  • 执行 Uinit 函数。

  • 擦除完成。


2.3 编程流程

编程流程,就是把编译出来的可执行程序下载到Flash或者其他存储器。

  • 对于所有 AXF 文件内容,执行 Init 初始化函数

  • 判断 Flash 算法是否在FLM文件中。不在则编程结束,返回失败。如果编程算法存在,则执行下面操作:

(1)加载算法到RAM

(2)执行Init函数

(3)加载应用程序(待编程的数据)到RAM Buffer中

(4)执行Program Page编程函数

(5)执行Uninit函数

  • 编程完成。


2.4 校验流程

校验就是把 AXF 文件中需要下载到Flash的数据,与实际下载到Flash的数据读出来进行比较。


  • 判断 Flash 算法是否在FLM文件中,不在则操作失败。如果编程算法存在,则执行下面操作:

(1)加载算法到RAM

(2)执行Init函数

(3)判断FLM文件是否存在校验算法。


  • 存在则加载应用程序到RAM,然后执行FLM文件中的校验算法

  • 不存在则计算和比较CRC值。把下载到Flash的数据读出来计算的CRC值,与 加载 axf 文件的数据到RAM中计算的CRC值进行比较。


  • 执行Uninit函数

执行完 Uninit 函数后面的步骤,不是很理解,这后面的步骤是不是和调试有关的,在下载代码时并没有关系?


3. 制作Keil环境的I2C EEPROM下载算法

下面我基于APM32F407,制作AT24C02 EEPROM存储芯片的下载算法。

对于下载算法的制作流程,官网已经给出了详细的步骤,下面的步骤是从官网翻译过来的。一个新的下载算法制作步骤:


  • ARM:CMSIS Pack 文件夹(通常为 C:\Keil\ARM\Pack\ARM\CMSIS\ version \Device_Template_Flash)中的内容复制到新文件夹。

  • 重命名项目文件NewDevice.uvprojx以表示新的闪存 ROM 设备名称,例如MyDevice.uvprojx

  • 使用 uVision 打开项目。从工具栏中,使用下拉菜单选择目标”来定义处理器架构。Cortex-M适用于所有 Cortex-M0/M0+、M3 和 M4 设备。该配置假定采用小端微控制器。如果是大端微控制器,请使用Project - Options for Target - Device选择正确的处理器内核。

  • 打开对话框“项目-目标选项-输出” ,然后更改“可执行文件名称”字段的内容以表示设备,例如MyDevice

  • 调整文件FlashPrg中的编程算法。

  • 调整文件FlashDev中的设备参数。

  • 使用Project - Build Target生成新的Flash 编程算法。输出文件(例如MyDevice.FLM)必须添加到DFP中。


上面的步骤就是官网给出的,下面我们就根据官网给出的步骤制作一个新的下载算法。


3.1 准备下载算法模板

下载算法的模板,我们在安装Keil的时候就有了的。官网说在 keil 的安装目录下能找到,但是我安装的是 5.36 版本,Keil安装目录没有找到,而是在 C:\Users\你的用户名目录\AppData\Local\Arm\Packs\ARM\CMSIS\5.8.0\Device_Template_Flash  这个目录找的的下载算法模板。

我们把该目录复制一份备用,然后记得把该文件夹的只读属性去掉。


3.2 Keil环境设置

1、把复制的模板工程的工程名,可以根据我们基于什么芯片制作下载算法修改一下工程名称,这样更具有辨识度。

2、修改选择的目标芯片。

我是基于APM32F407制作下载算法文件,所以选择M4内核就行。

3、修改编译生成的下载算法文件的名称。


4、添加APM32F407的外设驱动库以及I2C EEPROM的读写驱动文件

由于我们是要实现 I2C EEPROM 的下载算法,在编写这些下载算法函数之前,我们必须要先确保 I2C EEPROM 的驱动可以正常读写。I2C EEPROM 的驱动可以从我们实现的例程验证可行之后,然后挪过来使用即可。

3.3 修改FlashPrg.c文件中的编程算法函数

这一步是最重要的,我们实现Keil编程算法主要就是要实现 FlashPrg.c 文件中的各个下载算法函数。根据前面的介绍,一个新的下载算法必须要实现的函数有:Init/EraseSector/ProgramPage/Uninit 这4个函数,其他函数可以根据需要是否实现。下面我们来一一实现这些函数。

1、Init函数的实现


/*

 *  Initialize Flash Programming Functions

 *    Parameter:      adr:  Device Base Address

 *                    clk:  Clock Frequency (Hz)

 *                    fnc:  Function Code (1 - Erase, 2 - Program, 3 - Verify)

 *    Return Value:   0 - OK,  1 - Failed

 */

int Init (unsigned long adr, unsigned long clk, unsigned long fnc) 

{

    /* 系统初始化 */

    //SystemInit();  // 如果使用了库文件的该函数会导致下载是0x08000000地址校验失败,但是实际测试又是下载进去了。不知道什么原因

    I2C_Init();

    return 0;

}


在该函数中,我们可以初始化编程存储器的一些操作,比如配置时钟,GPIO的初始化等等。


2、扇区擦除和整片芯片擦除函数


/*

 *  Erase complete Flash Memory

 *    Return Value:   0 - OK,  1 - Failed

 */

int EraseChip (void) 

{

    volatile int i = 0;

    unsigned char tmepbuf[EE_PAGE_SIZE];

    

    unsigned char adr = 0;

    

    for(i = 0; i < EE_PAGE_SIZE; i++)

    {

        tmepbuf[i] = 0xFF;

    }


    for (i = 0; i < EE_SIZE / EE_PAGE_SIZE; i++)

    {

        ee_WriteBytes(tmepbuf, adr, EE_PAGE_SIZE);

        adr += EE_PAGE_SIZE;

    }

    

    return 0;

}


/*

 *  Erase Sector in Flash Memory

 *    Parameter:      adr:  Sector Address

 *    Return Value:   0 - OK,  1 - Failed

 */

int EraseSector (unsigned long adr) 

{

    volatile int i = 0;

    unsigned char tmepbuf[EE_PAGE_SIZE];

    

    adr -= I2C_EEPROM_ADDR;

    

    for(i = 0; i < EE_PAGE_SIZE; i++)

    {

        tmepbuf[i] = 0xFF;

    }


    ee_WriteBytes(tmepbuf, adr, EE_PAGE_SIZE);

    return 0;

}


实际上对于EEPROM芯片,不需要擦除就能写入数据的。不过为了示例,我们也实现这两个擦除函数好了。对于EERPOM来说,擦除就是往它写入0xFF数据即可。


3、ProgramPage 页编程函数实现


#define I2C_EEPROM_ADDR 0x01000000

/*

*  Program Page in Flash Memory

*    Parameter:      adr:  Page Start Address

*                    sz:   Page Size

*                    buf:  Page Data

*    Return Value:   0 - OK,  1 - Failed

*/

int ProgramPage (unsigned long adr, unsigned long sz, unsigned char *buf)

{

volatile int i = 0;

adr -= I2C_EEPROM_ADDR;

for(i = 0; i < sz/EE_PAGE_SIZE; i++)

{

ee_WriteBytes(buf+EE_PAGE_SIZE*i, adr+EE_PAGE_SIZE*i, EE_PAGE_SIZE);    

}

if(sz%EE_PAGE_SIZE)

{

ee_WriteBytes(buf+EE_PAGE_SIZE*i, adr+EE_PAGE_SIZE*i, sz%EE_PAGE_SIZE);    

}

return (0);

}


直接调用EEPROM的驱动写函数即可。另外 I2C_EEPROM_ADDR 这个宏定义,是为了在我们的应用代码中,定义数据时选择哪一块区域存储EEPROM的数据,地址是我们可以随意定义的。但是不能与MCU的外设地址,以及Flash、RAM等地址重合就行。


4、Uninit函数实现

该函数根据前面的Keil执行各编程流程,一般是退出编程时会被调用的,我们可以在该函数进行恢复的操作。该函数是必须实现的,如果不需要做任何动作,那么我们保持该函数为空函数就行。


/*

 *  De-Initialize Flash Programming Functions

 *    Parameter:      fnc:  Function Code (1 - Erase, 2 - Program, 3 - Verify)

 *    Return Value:   0 - OK,  1 - Failed

 */


int UnInit (unsigned long fnc) {


  /* Add your Code */

  return (0);                                  // Finished without Errors

}


3.4 修改FlashDev.c文件的设备参数

在FlashDev.c文件中有一个名为FlashDevice的结构体常量,这个结构体的信息是给 Keil 提供编程设备的信息的,比如编程的起始地址,总大小,一个扇区的大小,设备类型等等信息。我们根据自己的需要编程的设备类型修改即可。


struct FlashDevice const FlashDevice  =  {

   FLASH_DRV_VERS,             // Driver Version, do not modify!

   "APM32F407_I2C_EEPROM_AT24C02",   // Device Name 

   EXTSPI,                     // Device Type

   0x01000000,                 // Device Start Address. EEPROM的编程地址。

   0x00000100,                 // Device Size in Bytes

   8,                       // Programming Page Size

   0,                          // Reserved, must be 0

   0xFF,                       // Initial Content of Erased Memory

   6000,                        // Program Page Timeout 6000 mSec

   6000,                       // Erase Sector Timeout 6000 mSec


// Specify Size and Address of Sectors

   0x000008, 0x000000,         // Sector Size  8B (32 Sectors)

//   0x010000, 0x010000,         // Sector Size 64kB (2 Sectors) 

//   0x002000, 0x030000,         // Sector Size  8kB (8 Sectors)

   SECTOR_END

};


3.5 生成算法文件

我们实现了 FlashPrg.c 文件的编程算法函数之后,直接编译就可以生成 xxx.FLM 算法文件了。

在编译之前,我们需要检查生成的代码是位置无关码。在Keil设置如下:


C/C++和Asm选项卡都要检查是否已经勾选了上面的配置。

点击编译即可生成Keil下载算法文件。


4. 新制作的下载算法文件使用和测试

1、把生成的下载算法文件放置到Keil安装的目录 C:\Keil_v5\ARM\Flash 下待使用


2、Keil环境配置下载算法

3、APM32F407_I2C_EEPROM算法测试验证。

我们使用下载算法下载数据到EERPOM,然后再通过应用程序读出来进行对比写进去的数据是否一致,就可以知道EEPROM下载算法是否起作用。


我们找一个 APM32F407 EEPROM 的例程进行测试。


(1)首先在例程里面定义下面待烧录到EEPROM的数据:

const uint8_t EEPROM_FLM_Test1[16] __attribute__((at(0x01000000))) = {

    0xCB,0xFF,0x01,0x02,0x03,0xAA,0x06,0x07,

    0x08,0x09,0x10,0xA1,0xA2,0xA3,0xA4,0xBB

};

const uint8_t EEPROM_FLM_Test2[16] __attribute__((at(0x010000A0))) = {

    0x12,0x34,0x01,0x02,0x03,0xAA,0x06,0x07,

    0x08,0x09,0x10,0xA1,0xA2,0xA3,0xA4,0xBB

};


其中我们规定这些数组必须链接到 0x01000000 起始的地址,这是因为我们制作的 EEPROM 的下载算法编程地址就是在该范围,这个地址会在下载算法内部转换为EEPROM 编程的 0 地址,比如说 0x01000000 起始地址,对应的就算EEPROM的0地址。


(2)然后编译下载代码到Flash和EEPROM即可。

下载代码时,检测的0x01000000地址需要下载数据,Keil就会自动调用EEPROM的下载算法把数据编程到EEPROM了。

如下在下载程序没有报错,下载完成。

然后运行代码,把EEPROM的数据读出来,对比是否一致。


注:文章作者在原帖中提供了例程文件,有需要请至原文21ic论坛下载


原文地址:https://bbs.21ic.com/icview-3364968-1-1.html

或点击下方 阅读原文 跳转


↑↑↑ 点击上方卡片关注极海 ↑↑↑

极海Geehy 极海半导体是一家致力于开发工业级/车规级MCU、模拟与混合信号IC及系统级芯片的集成电路设计型企业
评论 (0)
  •   智慧华盛恒辉国有单位科研项目审计管理系统介绍   1、建设国有单位科研项目审计管理系统的重大意义   其深远意义体现在科研项目管理的核心环节,不仅关乎管理效能与成果质量的飞跃,还深刻影响着科研资金的优化配置、科研行为的规范性以及国家科技发展战略的顺利推进。   应用案例   目前,已有多个科研项目审计管理系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润科研项目审计管理系统。这些成功案例为科研项目审计管理系统的推广和应用提供了有力支持。   (1)强化科研项目管理的效
    华盛恒辉l58ll334744 2025-04-20 22:54 12浏览
  • 固态继电器(SSR)已成为工业自动化的无名英雄。它们安静、可靠、速度快——这是继电器应具备的所有特点。但就像高科技驾驶舱中的新手飞行员一样,即使是经验丰富的工程师在使用SSR时也会犯常见错误。本文让我们来看看应如何避免在工业自动化中使用固态继电器时应避免的5个错误。错误1:忘记散热“没有散热器的SSR就像穿着冬衣的马拉松运动员。”SSR模块在运行过程中会产生热量,尤其是在重负载下。忽略散热可能会导致过热、寿命缩短和彻底失效。始终考虑热管理要求,例如适当的散热器或强制风冷。解决方案:查看数据表中的
    腾恩科技-彭工 2025-04-19 17:18 4浏览
  •   北京华盛恒辉作战仿真系统软件是现代军事领域不可或缺的重要工具,用于模拟作战环境、训练人员和评估作战方案。它借助计算机技术搭建虚拟战场,支撑复杂作战场景推演分析,为军事决策提供科学依据。以下从核心功能、技术架构、应用场景和发展趋势四个方面展开解析:   应用案例   目前,已有多个作战仿真系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润作战仿真系统。这些成功案例为作战仿真系统的推广和应用提供了有力支持。   核心功能   战场环境建模:构建逼真的虚拟战场环境,涵盖地形、
    华盛恒辉l58ll334744 2025-04-20 11:06 9浏览
  •   战略仿真推演平台是一种基于计算机技术和仿真模型构建的决策支持系统,旨在通过模拟复杂战略环境,帮助决策者评估不同战略方案的效果、预测潜在风险并优化决策过程。此类平台广泛应用于军事、经济、能源、城市规划等领域,为高层决策提供科学依据。   应用案例   目前,已有多个战略仿真推演平台在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润战略仿真推演平台。这些成功案例为战略仿真推演平台的推广和应用提供了有力支持。   一、核心功能   多维度战略建模   动态推演与情景分析   
    华盛恒辉l58ll334744 2025-04-20 16:16 26浏览
  •     爬电距离指的是两个带电体之间、带电体和大地之间,沿着绝缘材料表面的最短距离。与爬电距离有关的标准有IEC 61010-1。PCB设计方面,可以参照IPC-2221B。        (图源TI)    任何情况下,爬电距离不允许小于电气间隙。当绝缘材料是空气时,爬电距离可以和电气间隙相等。电气间隙的简介见协议标准第011篇。        一般情况下
    电子知识打边炉 2025-04-19 20:54 62浏览
  •   战略仿真推演系统设计方案   一、系统概述   1.1 系统定位   北京华盛恒辉战略仿真推演系统是面向政府、企业及军事机构的决策支持工具。它通过搭建虚拟环境,模拟真实战略场景,助力用户评估不同策略的潜在影响,优化决策流程,提升战略规划的科学性与前瞻性。   应用案例   目前,已有多个战略仿真推演系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润战略仿真推演系统。这些成功案例为战略仿真推演系统的推广和应用提供了有力支持。   二、系统架构设计   2.1 总体架
    华盛恒辉l58ll334744 2025-04-20 16:27 16浏览
  •     CTI是Comparative Tracking Indices的缩写,在GB 4207中被译作“比较追踪指数”,我认为还是“漏电起痕指数”更容易理解。    CTI表述了材料的绝缘特性——阻止不希望出现的电流。CTI的单位是V,在绝缘物表面添加一定量的电解液并施加电场,观察在绝缘物表面既不会持续产生火焰,也不会因为热、介质击穿、湿气或者污染物产生电弧放电留下痕迹(起痕)的最高电压。CTI的测量方法见IEC 60112 (GB 4207)。&nbs
    电子知识打边炉 2025-04-19 21:20 62浏览
  • 滴哩收音机耳机拆解 在学生生涯,大伙肯定对衬衫的话题再熟悉不过了,都会调侃经济一直在发展,只有英语听力的衬衫的价格永远不会发生变化。没错,高考听力考试在正式开始前有一道试音的题目。 例如,你将听到以下内容:M: Excuse me. Can you tell me how much the shirt is ?W: Yes, it’s nine fifteen. 请看选项:How much is the shirt?[A]£19.15   [B] £9.15   [C] £9
    zhusx123 2025-04-19 16:42 1浏览
  •   北京华盛恒辉作战仿真系统软件平台是现代军事领域中用于模拟作战环境、评估作战方案、训练军事人员的重要工具。这些平台通过计算机技术构建虚拟战场,支持多兵种、多武器系统的协同作战仿真,为军事决策、战术训练和装备研发提供科学依据。以下从平台类型、核心技术、应用场景及发展趋势等方面进行详细介绍。   应用案例   目前,已有多个作战仿真系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润作战仿真系统。这些成功案例为作战仿真系统的推广和应用提供了有力支持。   一、作战仿真系统软件平台
    华盛恒辉l58ll334744 2025-04-20 15:37 13浏览
  •   数字化战场:军事态势视景仿真推演系统软件解析   北京华盛恒辉军事态势视景仿真推演系统软件是现代军事领域模拟战场态势、辅助指挥决策的关键工具。伴随信息技术发展,其在提升军事训练质量、优化作战指挥决策等方面的作用愈发显著。   一、系统概述   该系统借助数字化技术,构建高精度三维战场环境,模拟各类作战场景与武器装备运行状态,为军事指挥员及作战人员打造沉浸式战场体验。系统融合地理信息系统(GIS)、计算机图形学、人工智能等多学科技术,实现战场态势实时感知、动态推演与可视化呈现。   应
    华盛恒辉l58ll334744 2025-04-20 11:24 13浏览
  •   国有单位科研项目审计管理系统解析   一、系统建设意义   北京华盛恒辉国有单位科研项目审计管理系统对科研项目管理至关重要,其意义贯穿管理效能提升、资金优化配置、科研合规推进等核心环节,深刻影响国家科技战略实施。   应用案例   目前,已有多个国有单位科研项目审计管理系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润国有单位科研项目审计管理系统。这些成功案例为国有单位科研项目审计管理系统的推广和应用提供了有力支持。   提升科研项目管理质效:作为数字化、智能化管理工
    华盛恒辉l58ll334744 2025-04-20 23:21 18浏览
  •   智慧华盛恒辉国有单位招标标书查重系统介绍   1、建设国有单位招标标书查重系统的重大意义   (1)保障招标过程的公正性与透明度   在国有单位复杂的招标环境中,标书查重系统犹如一把利剑,精准切割出公平竞争的道路。该系统利用自动化比对与检测技术,快速揭露投标文件中潜藏的相似或重复内容,有效遏制了围标、串标及抄袭等恶劣行为,为招标过程披上了一层公正与透明的外衣。这不仅减少了人为干预的空间,更保障了合法投标人的权益,维护了市场的健康秩序,让每一次招标都成为真正的实力较量。   应用案例
    华盛恒辉l58ll334744 2025-04-20 23:07 21浏览
  • 在智能家居与物联网(IoT)技术快速发展的背景下,语音播报功能已成为烟雾报警器等安防设备提升用户体验的核心技术之一。厂家凭借其WTV、WTN、WT588F及WT2605C系列语音芯片,推出了三大烟雾报警器语音方案,覆盖传统、高集成度与智能化需求,为不同场景提供灵活选择。以下从技术特性、应用场景及行业价值三方面展开分析。一、方案对比与技术特性 方案类型核心芯片型号技术优势局限性适用场景传统分立方案WTN6/WT588F/WTV系列音质纯净,模块化设计便于维护;兼容性强,支持外接功放优化音
    广州唯创电子 2025-04-21 08:53 20浏览
  • 曾几何时,电视作为家庭娱乐的核心,是每个家庭客厅里不可或缺的存在。一家人围坐在电视机前,共享欢乐时光,这样的场景承载了无数人的回忆。然而,时过境迁,如今的彩电市场早已今非昔比。据奥维云网(AVC)推总数据显示,2024年中国彩电市场零售量为3086万台,同比微降1.8%。虽然零售额同比大幅增长15.7%,达到1271亿元,但这主要得益于产品结构升级、大屏化以及高端化趋势,并不意味着行业的全面复苏。从2024年618期间的数据来看,中国彩电线上市场销量规模为247.9万台,同比下降18.1%,销额
    用户1742991715177 2025-04-19 22:14 10浏览
  • 一、市场背景与竞争优势随着智能家居市场的爆发式增长,消费者对小家电的智能化、交互性需求显著提升。WTVxxx系列语音芯片凭借高性价比、卓越音质与功能集成度,已成为智能小家电领域的核心驱动方案。该系列芯片通过以下优势重塑行业格局:成本优化:集成MCU、语音播报、驱动控制等多功能模块,显著降低硬件成本与开发复杂度;智能化升级:支持语音交互、状态显示与智能控制,契合现代用户对高端体验的追求;快速迭代:兼容主流芯片架构,支持远程更新与硬件扩展,助力产品持续迭代。目前,WTVxxx芯片已广泛应用于扫地机器
    广州唯创电子 2025-04-21 08:32 21浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦