使用 Trace32 对 FLASH 编程

找到一个TRACE32-ICD使用说明解除了不少疑惑 高通REX的源码和编译环境已经建立。连接了SUPER-TRACE设备,上面标记了USB2.0-ICD。 虽然有TRACE安装过了,但是帮助太多。根据这些天的补充的知识,我用的连接设备应该是TRACE32-ICD的字样的帮助对我有用。 在线查看到的"TRACE32-ICD使用说明.doc",因为没有百度文档会员。先在线查阅记录一下要点: https://wenku.baidu.com/view/3d876a23ad02de80d5d84045.html 通过该文档解除我同事快速操作时候,我存在的很多疑 阅读详情
随着软硬件复杂性的增加,在嵌入式系统开发中,调试器对项目的开发进度、质量起着越来越重要的作用。在众多的调试器中,Lauterbach 公司的 Trace32 凭借其强大的功能,出色的性能,成为目前嵌入式系统开发中,尤其是高端系统中普遍采用的调试工具。

Trace32 除了具有对代码设置断点、跟踪调试等常规的功能以外,还能够控制对目标系统的 FLASH 进行编程。本文首先对比了 Trace32 FLASH 编程的两种方式:"Emulator controlled flash programming" 和 "Target controlled flash programming",指出"Target controlled flash programming"方式的优点;然后介绍了与 FLASH 编程相关的 Trace32 脚本命令,以及 Trace32 脚本命令与 FLASH 编程软件之间的通信机制;最后,给出了 "Target controlled flash programming" 方式的控制流程。

注:本文中使用的"编程"一词,除了具有对 FLASH 烧写的含义外,还包括擦除、校验等其它对 FLASH 的操作。

一、FLASH 编程的两种方式

对目标系统中的 FLASH 有两种方式进行编程,分别是 "Emulator controlled flash programming" 和 "Target controlled flash programming"。

在 "Emulator controlled flash programming" 方式下,所有对 FLASH 编程的操作都是由 Emulator 完成的,不使用目标系统的资源。Trace32 软件支持市面上几乎所有的 FLASH芯片(可以访问 http://www.lauterbach.com/ylist.html 查询 Trace32 支持的 FLASH 型号),只要在脚本命令 FLASH.Create 中指明目标 FLASH 的型号,地址范围以及总线的配置,用户就可以使用脚本命令直接将数据烧写到 FLASH,不需要编写任何对 FLASH 操作的代码。

在 "Target controlled flash programming"方式下,对 FLASH 的编程控制是由运行在目标系统上的 FLASH 编程软件完成的,而这个软件必须由用户自行开发。此时,Trace32通过使用脚本对目标系统内存地址空间的访问,向 FLASH 编程软件传送控制参数和数据。

由于直接在目标系统的处理器上运行,采用 "Target controlled flash programming" 方式可以获得比 "Emulator controlled flash programming"方式快得多的编程速度。这对于烧写大的文件,以及生产线等场合来说十分重要。另外,只要编写相应的 FLASH 编程软件,用户选择的任何 FLASH 都能够被支持。

因此,对于 FLASH 编程的内容较少,或者对编程的时间要求不高的情况下,可以使用"Emulator controlled flash programming" 方式;但是,对于需要编程较大的文件,而且对速度要求较高的情况下,"Target controlled flash programming" 方式是唯一的选择。本文中只讨论 "Target controlled flash programming" 方式。







二、Trace32 脚本

在 Trace32 的界面中,可以使用菜单,鼠标完成操作,也可以完全使用命令操作。事实上,Trace32 内嵌了强大的命令和脚本处理功能。使用 Trace32 的命令不仅可以完成所有的功能,而且可以获得比菜单方式更大的操纵性和灵活性。脚本以 .CMM 为后缀。

下面就介绍 Trace32 中与 FLASH 操作相关的命令,见下表:




这里列出后面需要使用到命令的详细格式,以便参考。

1. FLASH.Create
格式:

FLASH.Create <unit_number> <physical_range> <sector_size> <family_code>
<bus_width>
<family_code>: I28F001B | I28F200B | ... | TARGET | EEPROM | NOP
<bus_width>: Byte | Word | Long | Quad

例如,定义Am29LV640(16 bit mode, 16 bit bus, 128 sectors, 64Kbyte/sector)

FLASH.RESet
FLASH.Create 1. 0x0 -- 0x7FFFFF 0x10000 AM29LV100 Word

对于采用 "Target controlled flash programming" 方式,familiy_code 必须选择为TARGET。与 FLASH 编程软件的连接由 FLASH.Target 完成。

2. FLASH.Erase
格式:

FLASH.Erase <unit> | <address_range> | ALL

例如:

FLASH.Erase 0x0 -- 0x1FFFF
FLASH.Erase ALL

3. FLASH.Program
格式:

FLASH.Program [<unit> | <address_range> | ALL | OFF]

一旦激活了编程模式,任何对 FLASH 地址空间的写访问操作将会导致对 FLASH 的编程。例如:

FLASH.Program ALL
Data.LOAD.Binary data.bin /Word  <-  装载数据到FLASH空间
FLASH.Program OFF
…

4. FLASH.TARGET
格式:

FLASH.TARGET <code_address> <data_address> [<buffer_size>] [<file>] <code_address>

运行在目标系统上的 FLASH 编程软件被下载到的 RAM 起始地址,占用的大小为FLASH 编程软件本身的大小,另外再加上 32 字节。

  • <data_address>
    参数块的起始地址,大小为 32 字节(参数块)+ <buffer_size> + 256 字节(stack)。
  • <buffer_size>
    从 Trace32 软件一次传递给 FLASH 编程软件的数据字节数。建议的缓冲大小为 4KB。
  • <FLASH_algorithm>
    二进制形式的 FLASH 编程软件。

使用上面这些命令进行 FLASH 编程的一般步骤是:

1) 首先使用 FLASH.Create 定义目标 FLASH 的地址空间,类型,及总线配置。

2) 对于"Target controlled flash programming"方式,必须向目标系统加载 FLASH 编程软件。FLASH.Target 命令把 FLASH 编程软件的起始地址,参数块的起始地址,以及缓冲区大小等信息通知 Trace32。FLASH.Program 和 FLASH.Erase 命令就会调用确定的 FLASH 编程软件,并传递合适的参数。

3) FLASH.Program 启动编程模式后,如果有数据传输命令执行(如 Data.Set 或者Data.LOAD),Trace32 会检查数据传输的地址是否落在 1)中定义的 FLASH 地址空间内。如果是,Trace32 会根据缓冲区的大小,把部分数据填充到数据缓冲区中,初始化参数块,设置目标系统的 PC 为 FLASH 编程软件的起始地址,并开始执行。执行结束后,控制权回到 Trace32。Trace32 检查返回的信息(也在参数块中),如果正常,继续处理剩余的数据。

下面通过一个例子来说明:

目标系统的配置了的 FLASH 为 Intel Strata FLASH 28F320J3A(16 bit mode, word access),CPU 为 ARM core。

目标系统的内存影像(memory map)为:

  • FLASH: 0x0 - 0x3FFFFF
  • RAM 起始地址:0xA0000000

相应的 Trace32 脚本为:

FLASH.RESet
FLASH.Create 1. 0x0--0x3FFFFF 0x20000 TARGET Word
FLASH.Target 0xA0000000 0xA0001000 0x1000 ~~/demo/arm/FLASH/word/i28f200j3.bin
FLASH.Erase 1.
FLASH.Program 1.
Data.LOAD.Elf my_application.elf /Word
FLASH.Program OFF

首先,通过 FLASH.Create 创建一个 FLASH 区域1,地址范围为 0x0 到 0x3FFFFF,Sector 的大小为 0x20000,对此 FLASH 区域的编程软件由 TARGET 指定。WORD 参数则指明目标系统 CPU 访问 FLASH 的数据宽度(还可以是 BYTE, LONG, QUAD)。

FLASH.Target 指定对 FLASH 区域编程软件的位置在 0xA0000000,参数块在0xA0001000。参数块后面一般紧跟着数据缓冲区,缓冲区的大小为 0x1000。编程软件是~~/demo/arm/FLASH/word/i28f200j3.bin。

接着擦除 FLASH 区域 1,然后启动 FLASH 编程模式。

Data.load.elf 命令将 my_application.elf 装载到 FLASH 区域,触发了 FLASH 编程软件,从而被写入到指定的 FLASH 区域中。

最后,关闭 FLASH 编程模式。







三、Trace32 命令与 FLASH 编程软件之间的通信机制

从上面的例子可知,在 Trace32 软件与 FLASH 操作程序之间有一个数据交换区-参数块,用来传递控制命令和数据,并返回操作结果。参数块的位置是由FLASH.Target命令中的data_address指定的。紧跟着参数块是缓冲区。

参数块的定义如下:




操作结束后,参数块存放操作的返回结果:




参数块以及紧跟的缓冲区的相应 C 语言定义如下:

struct {
    ulong32 flashaddr;
    ulong32 flashwidth;
    ulong32 width;
    ulong32 offset;
    ulong32 addr;
    ulong32 size;
    ulong32 reserved;
    ulong32 status;		/* in: 1=program, 2=erase, out: 0=o.k., 0x100=fail */
    uchar8 data[4096];		/* Programming Buffer, size can be made smaller 
	(FLASH.TARGET command) */
} FlashParameter;







四、Target controlled flash programming 流程

开发基于"Target controlled flash programming" 方式的一般流程为:

1. 编写在目标系统上运行的 FLASH 编程软件

2. 将 FLASH 编程软件装载到目标系统的 RAM 中(使用 Data.LOAD 命令)

3. 通过命令 FLASH.Create 和 FLASH.Target 命令将 Trace32 连接到目标系统上的FLASH 编程软件

4. 使用命令 FLASH.Program,FLASH.Erase 等命令控制对目标系统上 FLASH 的操作,这些命令会调用 FLASH 编程软件中相应的功能,并传递合适的参数

实例(AM29F800)

目标系统上有两块型号为 AM29F800 的 FLASH,每块 FLASH 的数据宽度为 16bit,两块合并成 32bit 宽度。每块 FLASH 有 1MB 的大小,它们的起始地址为 0x200000。

目标系统上还配置了 SRAM,大小为 8kB,地址范围是 0H 到 1FFFH。

为目标系统开发的 FLASH 编程软件为 FLASHprog.bin(大小为 450H 字节,二进制格式)。参数块被安排在 SRAM 的地址 0H 开始。

需要烧入目标系统 FLASH 的应用程序为 application.elf(ELF 格式,起始位置为0x200000)。这里需要说明的是,在联接产生 application.elf 时,必须通过联接脚本 - SCL 文件指定其起始位置为 0x200000。这样"Data.load.elf application.elf "命令就会将 application.elf 装载到从 0x200000 开始的地址空间。

对于这样的应用,需要编写一个控制脚本(CMM 文件),同时还要开发一个 FLASH的编程软件。下面首先介绍控制脚本的内容,然后给出了 FLASH 编程软件的流程。

控制脚本

控制脚本的内容如下:

1) 进行必要的目标系统设置,特别是片选配置,使得 SRAM 和 FLASH 都落在安排的地址空间中

2) 将 FLASH 编程软件 FLASHprog.bin 装载到 SRAM 中地址 0x1200 处: Data.LOAD.B FLASHprog.bin 1200

3) 在 FLSAH 编程软件的结束位置设置断点(break.set swbp),这样在执行结束后,控制可以交回给 Trace32

4) 通知 Trace32 关于 FLASH 的配置,FLASH 编程软件的位置,参数块以及数据缓冲区的位置

FLASH.Create 200000--3fffff TARGET LONG
FLASH.TARGET 1200 0 1000

此时 SRAM 的内存安排为:




5) 擦除整个 FLASH
FLASH.Erase ALL

6) 编程应用程序 application.elf
FLASH.Program ALL
Data.LOAD.elf application.elf
FLASH.Program OFF

执行 FLASH.Erase ALL 命令时,调用 FLASH 编程软件的擦除功能,相应的参数块填充为:




此时,数据缓冲区没有内容。

擦除结束后,遇到设置的断点,控制权交回给 Trace32,参数表中为返回的状态:




执行 Data.LOAD.bin application.bin 时,调用 FLASH 编程软件的编程功能,相应的参数块填充为:




此时缓冲区中填充了需要编程的数据。

编程结束后,控制权交回给 Trace32,参数表中为返回的状态:




如果没有错误发生,以上的编程过程会一直下去,直到 application.bin 中的数据全部传输完毕。

FLASH 编程软件

FLASH 编程软件的流程为:

1) 定义参数块的数据结构:
struct FlashParameter flash_param;
FlashParameter 的定义见上文。

2) 定义每个功能对应的功能号:

#define FLASH_PROGRAM               0x00000001
#define FLASH_ERASE                   0x00000002
#define FLASH_CHIP_ERASE             0x00000005
…其它功能号

3) 主控制流程:

  switch ( flash_param.status )
  {
    case FLASH_PROGRAM:
      flash_program();
      break;
    case FLASH_ERASE:
      flash_erase();
      break;
    …其它功能
  }
flash_program()  函数从参数块中获取编程的数据、大小以及编程的目标地址,
                 实现对 FLASH 的编程功能。
flash_erase() 函数从参数块中获取擦除的目标地址以及大小,
              实现对 FLASH 的擦除功能。

4) SCL 文件

RAM 0x200000
{
    CODE 0x200000 
    {
      main.o (+RO)
      * (+RO)
    }
    APP_RAM +0x0
    {
      * (+RW, +ZI)
    }
}    



参考资料

  • Trace32 Online Help

  • Arm ADS Online Book


关于作者

 

汤凯,通过 tangk73@hotmail.com 可以跟他联系。

 
用Lauterbach Trace32调试AutoSar NvM:从写入、掉电到上电读取的全过程实录 本文详细介绍了使用Lauterbach Trace32调试器对AutoSar NvM模块进行全链路验证的过程,包括写入、掉电恢复和上电读取的关键步骤。通过实战案例和调试技巧,帮助工程师掌握NvM模块的配置与验证方法,提升汽车电子系统的可靠性和性能。 阅读详情

相关推荐

TRACE32如何配置HyperFlash?从识别到烧录的完整调试指南

嵌入式开发中,调试器与存储器的适配常常是工程顺利推进的隐性前提。调试器通过JTAG/SWD等调试端口,经CPU内部总线控制器访问外部Flash,因此必须精准识别Flash型号、地址映射与时序参数,才能完成擦除、编程与校验。HyperFlash作为高速NOR Flash,凭借HyperBus接口和DDR模式提供高带宽,在汽车仪表、ADAS与工业HMI等场景应用广泛。然而,实际调试时经常遇到Flash unrecognized、读回全FF或写入失败等问题,根本原因多在于时序配置不匹配或初始化流程缺失。借助TRA

weixin_33924770的博客 398

劳特巴赫脚本学习二

指令用于定义和管理内存区域,通常用于批量操作或分段管理内存。它们并不直接改变内存数据,但可以帮助组织和管理这些数据。指令主要用于操作内存数据,包括加载、保存、设置和修改内存中的数据。它们是调试和编程过程中非常重要的工具。相关指令主要用于控制和管理目标系统,常用于调试和开发过程中。相关指令用于闪存操作,包括擦除、编程和配置等。命令接受输入参数并赋值给相应的全局变量。

good_grape的博客 2200

S32K3 工具篇6:脱离IDE环境下的Lauterbach ELF文件高效调试技巧

本文详细介绍了在脱离IDE环境下使用Lauterbach TRACE32调试S32K3系列ELF文件的高效技巧。从环境搭建、ELF文件加载到高级调试功能如智能断点设置和内存监控,帮助开发者提升嵌入式调试效率。特别适合处理自动化生成的MCAL代码或持续集成环境中的调试需求。

weixin_29172963的博客 329

Trace32 部分命令

Trace32部分命令

qq_36181546的博客 1279

使用 Trace32 对 FLASH 编程.doc

使用 Trace32 对 FLASH 编程.doc 使用 Trace32 对 FLASH 编程.doc

TRACE32的一些常用命令

我们使用Trace32最主要用途有两个:程序下载和程序调试。下载目前各个项目都有相应的.cmm文件(类似于批处理文件.bat),在此文件中,Trace32把对FLASH擦除/编程的插件下载到手机的SRAM中,然后把控制权交给此插件,详细过程就不在此叙述,这里主要是介绍一些我们在程序调试过程中常用的一些命令。......

使用 Trace32 对 FLASH 编程摘要及Trace32-ICD和Trace32-ICE的区别

使用 Trace32 对 FLASH 编程 https://safrans.blog.csdn.net/article/details/8544901 转来比较麻烦,原文阅读效果更好 摘要内容: 介绍: 一、FLASH 编程的两种方式 二、Trace32 脚本 三、Trace32 命令与 FLASH 编程软件之间的通信机制 四、Target controlled flash programming 流程 Trace32-ICD和Trace32-ICE的区别 https://blo

thanklife的专栏 1004

TRACE32软件的Practice脚本 cmm脚本.zip

标准Practice脚本的扩展名是.cmm,因此有人也称之为cmm脚本 Practice脚本是Lauterbach公司提供的一种脚本语言,运用于其TRACE32软件当中,非常容易上手、并且功能强大。 我在文章https://thanklife.blog.csdn.net/article/details/119608383做了简单说明 先加后记:在搜TARACE32的cmm文件和脚本的时候找到如下的文章。既然是Practice语言。TRACE32应该有这个帮助。于是在安装的TRACE的在线帮助PDF文档下面找到了如下三个文章,我觉得后面学习该内容就可以通过这三个文件了。 training_practice.pdf practice_user.pdf practice_ref.pdf

【转】使用Trace32使用教程之 对FLASH 编程-chiantrace|super trace

<br />在 Trace32使用教程之 的界面中,可以使用菜单,鼠标完成操作,也可以完全使用命令操作。事实上,Trace32使用教程之 内嵌了强大的命令和脚本处理功能。使用 Trace32使用教程之 的命令不仅可以完成所有的功能,而且可以获得比菜单方式更大的操纵性和灵活性。脚本以 .CMM 为后缀。<br />下面就介绍 Trace32使用教程之 中与 FLASH 操作相关的命令,见下表:<br /><br /><br />这里列出后面需要使用到命令的详细格式,以便参考。<br />1. FLASH.Cr

xw221的专栏 3658

区块链技术在碳足迹数据存证与溯源中的应用深度解析

消费者扫描产品上的二维码,即可通过区块链浏览器查询到该产品的数字碳标签,并追溯其从茶园到货架的每一步碳足迹数据,以及这些数据是如何被智能合约自动计算和认证的,从而建立起强大的品牌信任。如果说哈希链解决了数据的“存”与“证”的问题,那么智能合约则解决了数据“用”与“管”的自动化问题。综上所述,虽然针对“碳足迹数据可追溯性”这一特定应用场景的公开、标准化的性能基准案例尚不丰富,但现有研究和企业级解决方案(特别是联盟链)已经证明,通过合理的技术选型和架构设计,区块链的性能可以满足实际商业需求。

百态·数智思维 | 聚焦大数据、量化与未来AI 1106

智能体在车联网中的应用:第9天 核心工具链与仿真世界:SUMO交通仿真入门——从安装到构建你的第一个虚拟十字路口

摘要 SUMO是一款开源微观交通仿真工具,为车联网和自动驾驶算法开发提供高效安全的测试环境。文章详细介绍了SUMO的核心概念、安装方法及实战应用。在Ubuntu或Windows系统安装SUMO后,可通过netedit工具构建十字路口路网,包括创建节点、连接边、设置交通信号灯等步骤。随后通过编写.rou.xml文件定义车辆类型、路线和车流,实现动态交通场景模拟。SUMO支持与外部程序交互,能复现真实场景、进行极端测试和算法验证,是车联网研究的理想数字沙盘。

IT深耕十余载,大道之简 1451

TRACE32调试器开箱与上手:从拆箱到点亮第一个ARM Cortex-M内核(保姆级图文)

本文详细介绍了Lauterbach TRACE32调试器的开箱与上手过程,从硬件连接到软件配置,再到第一个ARM Cortex-M内核的调试实战。通过保姆级图文教程,帮助开发者快速掌握TRACE32的使用技巧,解决常见的软硬件安装问题,提升嵌入式开发效率。

weixin_28452161的博客 284

llama.cpp部署大模型

llama.cpp如何部署大模型

Eddy的博客 979

JFlash烧录程序驱动适配实战:从零实现STM32支持

手把手带你完成JFlash烧录程序驱动适配,重点解决jflash怎么烧录程序这一核心问题。以STM32为目标平台,从环境搭建、接口对接到固件验证全程实操,覆盖JFlash烧录程序的关键配置与调试技巧,助你真正掌握嵌入式烧录全流程。

weixin_30021053的博客 241

MiniMax H3 + ComfyUI 工作流搭建指南:从整合包到视频生成

AI视频生成正成为内容创作的新基础设施,而ComfyUI作为可视化工作流引擎,将复杂的模型推理过程拆解为节点与连线,让本地视频生成变得可复用、可批量。理解这一原理后,用户无需编写代码,只需掌握模型加载、提示词控制、采样与解码的基本链路,即可搭建出稳定的视频生产管线。MiniMax H3作为前沿视频生成模型,在ComfyUI中通过权重文件和自定义节点落地,配合整合包可大幅降低环境配置门槛。从硬件评估、目录结构到节点连接与参数调优,本文系统性梳理了从零跑通一条视频生成工作流的完整路径,帮助用户在批量素材生成、风

weixin_29057065的博客 415

前言:关于作者吴秋生博士与此书简介

博士现为田纳西大学,诺克斯维尔分校,地理系的副教授。他的研究兴趣包括地理信息科学(GIS)、遥感和环境建模。更具体地说,对应用地理空间大数据、机器学习和云计算(例如,谷歌地球引擎、微软行星计算机)来研究环境变化,特别是地表水和湿地淹没动态。吴博士是开放科学和可重复研究的倡导者。他开发了几个用于高级地理空间分析的开源软件包(例如,吴博士还在YouTube上发布了数百个有关GIS和地图绘制的视频。更多有关他的开源项目信息,请访问GitHub(查看他的YouTube频道。.....................

韩天放 6089

Wasmtime 异步主机函数实战:C API 下的 fuel 让出、continuation 与 call future 轮询

本文以仓库中 [docs/examples-async.md](https://link.gitcode.com/i/7868022528c91f2d4628338812cfc26b) 所对应的异步主机函数(Async Host Functions)示例为主线,完整演示如何将 Wasmtime 配置为异步运行模式:通过燃料(fuel)机制周期性让出执行权、定义可暂停/恢复的异步主机函数,并通过轮询

gitblog_01185的博客 319

SoulX-FlashHead 加速实践,提升3倍。

SoulX-FlashHead 加速实践,提升3倍。

jacke121的专栏 224

不止于调试:聊聊Lauterbach TRACE32在汽车电子SMP/AMP多核调试中的实战价值

本文深入探讨了Lauterbach TRACE32在汽车电子SMP/AMP多核调试中的实战价值,展示了其在异构多核调试、功能安全验证、系统性能调优等方面的独特优势。通过同步调试引擎、Cross-Trigger功能等高级工具,TRACE32能精准定位Cache一致性、跨核通信等复杂问题,大幅提升开发效率。

weixin_30788619的博客 337

Doris磁盘空间管理(生命周期管理、清理磁盘空间方法)

在进行数据仓库开发时,比较头疼的是历史数据不删除,磁盘空间不断增长,如果磁盘空间不足时,spark调度任务写入时就会报错。

大模型大数据攻城狮的专栏 1718

7、Python高光谱分析工具(PyHAT)简介

Python高光谱分析工具(PyHAT)是一个开源、跨平台的Python库及图形用户界面,用于行星光谱数据的可视化与分析。它支持多种高光谱传感器数据,如火星勘测轨道飞行器的CRISM、月船1号的M3以及SELENE Kaguya SP点光谱仪,提供预处理、衍生产品生成、统计学习和机器学习分析功能。PyHAT基于Pandas和NumPy构建,兼容Jupyter和QGIS环境,旨在解决现有光谱分析方法缺乏开源实现、难以探索性分析和算法分散的问题。其模块化架构涵盖数据输入/输出、通用光谱变换、测绘与点观测工具及高

aa123的博客 138

TRACE32调试Spansion HyperFlash:从初始化到烧录实战指南

嵌入式系统开发中,外部存储器调试常因调试器无法识别或初始化Flash而受阻。从NOR Flash接口的演进看,SPI/QSPI串行访问存在吞吐瓶颈,而HyperFlash基于HyperBus接口,以8位DDR方式实现高带宽线性读映射,大量用于i.MX RT等高性能MCU。要让调试器正确读写这类器件,关键在理解HyperBus控制器初始化、FLASH配置脚本加载及烧录算法执行机制。以Lauterbach TRACE32为例,讲解了通过SEMC寄存器配置、FLASH.Configure指定Spansion型号、

leonard61306500的专栏 299

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: 思考: 写Driver人比较吃香吗?
下一篇: 基于ARM的嵌入式TCP/IP协议的实现
Mobidogs
博客等级 码龄21年 186粉丝 264原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值