ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

芯参谋(23):并口/并行NOR_PPI_NOR_软件设计规范

芯参谋(23):并口/并行NOR_PPI_NOR_软件设计规范 并行NOR_PPI_NOR_软件设计规范http://39.108.239.75:5001/share/DNylYp0iuzRP5QChttp://39.108.239.75:5001/share/DNylYp0iuzRP5QC并行 NOR FlashPPI NOR软件设计规范编制日期 2026-09-24 版本号 Rev 1.5面向异步 SRAM 类并行总线 NORCFI Primary Command Set 0x0002 / AMD-Fujitsu 命令集x8 / x16 TSOP-56 与 BGA-64的固件驱动设计约定 —— 覆盖解锁周期与命令序列、DQ7/DQ6/DQ5 状态轮询、写缓冲与 Unlock Bypass、扇区保护PPB / DYB / WP#、XIP 冲突处置与掉电数据完整性逐条给出可落地的命令序列、轮询判据与超时预算。文档编号PPI-NOR-SW-SPEC-001版本 / 状态V1.0 · 正式发布适用器件芯天下 XTX XT29FXT29F512ATSHGA / XT29F01GATSHGA、M29FM29F512BTSJGA / M29F512BBGJGA / M29F01GBTSJGA / M29F01GBBGJGA / M29F02GBBGJGA及命令集兼容的第三方并行 NOR参考标准JEDEC JEP137 / JESD68CFI· CFI Primary Command Set 0x0002 · 各型号 datasheet 与 Errata配套文档并行NOR_PPI_NOR_电路设计指南.html原理图 / 布线 / 时序 / 信号完整性0. 目的与范围本规范约束并行 NOR 器件在嵌入式固件中的软件行为命令序列、地址换算、状态轮询、扇区保护、 XIP 冲突处置、掉电保护。凡本文与器件 datasheet 冲突以 datasheet 为准。统一命令序列读无命令直接寻址、编程解锁 A0h 地址 数据、擦除六周期各自固化为一套标准流程。统一状态判读只用 RY/BY# 或 DQ7 / DQ6 判定完成并强制配 DQ5 超时二次确认禁止固定延时。统一地址换算明确 x8 / x16 下的命令地址与「字地址 ↔ 字节地址」关系消灭移植时最高频的地址错位 bug。统一 XIP 规则擦写期间禁止从本器件取指给出三种可执行方案与各自的适用边界。统一掉电保护给出写窗口、A/B 双区提交协议与 IAP 双 Bank 流程明确哪些操作是原子的。不在本规范范围原理图、PCB 布线与端接见《并行 NOR FlashPPI NOR电路设计指南》 文件系统与参数管理算法选型同步突发 / ADM 复用模式的具体寄存器配置仅给出识别与约束。一句话结论并行 NOR 是「读像 SRAM、写像命令」的器件 —— 读只要拉低 CE#/OE# 就出数据 任何写都是解锁周期0x555 ← AA / 0x2AA ← 55 命令码擦写完成只看RY/BY# 或 DQ7/DQ6 并且必须用DQ5兜底判超时。不做轮询的写会写出半字不配 DQ5 的轮询会死循环XIP 下不隔离取指的擦写会让程序直接跑飞。文档使用说明本文是《并行 NOR FlashPPI NOR电路设计指南》的软件配套篇硬件篇解决「怎么接、怎么供电、怎么走线、等待周期怎么算」本文解决「驱动怎么写、命令怎么发、状态怎么判、XIP 怎么保命」。命令码以CFI Primary Command Set 0x0002AMD / Fujitsu为准这是并行 NOR 的主流命令集Intel 命令集0x0001器件不在本文范围内须另行核对。文中代码为x16 总线示例volatile uint16_t *x8 总线需按 1.3 节的换算规则调整地址与数据宽度。文中 C 代码为协议骨架伪代码演示流程与判断条件nor_cmd()、systick_ms()、delay_us()为平台相关底层。贯穿全文的三条铁律①绝不用固定延时替代状态轮询——擦写时间随 P/E 次数、温度、个体差异成倍变化典型值只能用来安排轮询节奏 ②写/擦前必须确认扇区已解保护且已擦除——DYB 上电默认为保护态且 NOR 只能把 1 写成 0 ③XIP 下擦写期间禁止取指——轮询本身也是「读器件」读到的是状态位而非指令。1 · 器件定位与阵列组织并行 NOR 与串行器件最大的差别是地址线直连CPU 的地址总线就是存储器的地址读操作不需要任何命令。 软件设计的第一件事是把「擦除粒度」和「地址换算」这两件事彻底搞清楚。1.1 器件定位与关键参数70~110 ns随机读 tACC与 SRAM 同量级XIP 可行的基础100 000P/E endurance每扇区 10 万次擦写20 年数据保持TA ≤ 85 ℃ 条件下4 KB~128 KB扇区擦除粒度由 CFI 区块表给出禁止硬编码16~32 字写缓冲深度CFI 0x2A 字段 2N 字节16~60 µs单字编程 tWHWH1典型值最大可达 300 µs0.3~1 s扇区擦除 tSE最大 5 s寿命末期可达 2~4 倍1~15 µADPD 电流RESET# 拉到 VSS±0.3 V上述为跨厂商、跨工艺的典型值区间仅用于方案评估定稿前必须用目标型号 datasheet 对应表格替换XTX 系列以 datasheet 为准。项目取值 / 范围软件影响接口形态异步 SRAM 类并行总线40 ~ 50 根引脚读无需命令需配置总线等待周期位宽x8 / x16BYTE# 引脚选择地址换算与命令地址随位宽变化1.3 节容量范围1 Mb ~ 2 GbXTX 当前 512 Mb ~ 2 Gb容量从 CFI 0x27 读取不要硬编码速度等级tACC 70 / 90 / 100 / 110 ns决定 SoC 等待周期配错表现为偶发读错工作电压3 V 型 2.7 ~ 3.6 V1.8 V 型 1.65 ~ 1.95 VCFI 0x1B/0x1C 以 BCD 给出上电自检应核对命令集CFI Primary Command Set 0x0002本文全部命令基于此0x0001Intel不适用坏块 / ECC出厂基本无坏块不需要 ECC只需维护「运行期失败扇区表」7.6 节封装TSOP-5614×20 mm/ BGA-648×10 ~ 9×11 mm仅影响硬件软件无差异1.2 区块Region与扇区组织并行 NOR 的擦除粒度不是全片统一的器件把不同大小的扇区分成若干个「区块区域Erase Block Region」。 典型布局是「底部 / 顶部若干个 8 KB 小扇区 中间大量 64 KB 大扇区」小扇区通常留给 bootloader 与参数区。并行 NOR 的层级Device → Region → Sector → Word擦除粒度由 CFI 给出1 Device 全部地址空间1 Mb ~ 2 Gb地址线性映射读操作无需发任何命令1 Erase Region 若干同尺寸 SectorCFI 0x2C 给出区域数常见布局8 KB × 8 小扇区 64 KB × 254 大扇区1 Sector 4 KB ~ 128 KB擦除的最小单位擦除地址 SA 取扇区内任意地址即可1 Word 16 bitx16/ 1 Byte 8 bitx8编程的最小单位写缓冲一次最多 16 ~ 32 字扇区布局禁止硬编码上电必须从 CFI 区块表0x2E 起读出并缓存图 1-1 并行 NOR 的存储层级。擦除粒度与区块分布是器件相关的同一个驱动要兼容多料号就必须从 CFI 查询区读出来而不能写死 64 KB。「扇区大小写死 64 KB」是最常见的兼容性事故把sector_size 64 * 1024写进驱动的后果在「8 KB × 8 64 KB × 254」布局的器件上擦除底部 8 KB 小扇区时会把相邻 56 KB 一起擦掉 而在 128 KB 大扇区器件上一次擦除只覆盖了半个扇区擦除永远「擦不干净」。正确做法上电遍历 CFI 区块区域表构建一张「扇区起始地址 → 扇区大小」的查找表所有擦写 API 只接受扇区索引。1.3 位宽、地址错位与字节序这是并行 NOR 移植时出错率最高的一节。同一条命令序列在 x8 与 x16 下落到 SoC 地址总线上的数值并不相同。同一个解锁地址 0x555在 x8 与 x16 下对应的 SoC 字节地址不同x16BYTE# 1SoC 字节地址0x00000AAA器件地址总线 A[10:0] 0x555不除以 2x8BYTE# 0SoC 字节地址0x00000555器件地址总线 A[10:0] 0x555一一对应字地址换算word byte 1x8 模式由 DQ15/A-1 充当最低位地址x16 模式 DQ15 为数据最高位典型踩坑把 x8 的地址 0x555 再乘 2 当字地址用解锁序列失效 → 器件把整条命令当成一次普通写 → 不报错、也不执行。命令锁存比较的是「地址总线上的值」x16 下 0x555 就是 0x555不再做字节换算。图 1-2 x8 / x16 的地址换算。命令地址在两种位宽下同为 0x555 / 0x2AA变的是它在 SoC 字节地址空间中的位置务必用逻辑分析仪实测确认地址线的实际电平。模式BYTE#编程单位解锁地址SoC 侧数据宽度DQ15 作用x80下拉1 字节字节地址0x555/0x2AA8 bit复用为A-1最低位地址x161上拉1 字2 字节字节地址0xAAA/0x55416 bit数据最高位 DQ15BYTE# 浮空 位宽不确定BYTE# 由外部电阻固定x16 上拉 10 kΩ 到 VCCx8 下拉到地绝不允许浮空。软件侧无法补救 浮空时器件可能间歇性地在两种位宽间跳变表现为「大部分时间能读偶尔读出错位数据」极难定位。驱动初始化时应读取 CFI 0x28 接口描述字段确认实际位宽0 x8 only / 1 x16 only / 2 可切换与编译期配置不符即报错停机。1.4 与 SPI NOR / 并行 NAND 的关键差异维度并行 NOR本文SPI NOR并行 NAND读方式地址直连拉 CE#/OE# 即出数据无命令发03h 地址 dummy发命令 地址页读进 cache随机读延迟70 ~ 110 ns首字节 60 ~ 100 ns 指令开销25 ~ 50 µs页搬 SRAM写方式解锁周期 A0h 地址 数据06h02h 地址 数据命令 页装载 编程执行状态判读DQ7 / DQ6 / DQ5 RY/BY# 引脚读状态寄存器05h读状态 / R/B# 引脚坏块 / ECC出厂无坏块不需要 ECC不需要必须 BBT 硬件 ECC擦除粒度扇区 4 KB ~ 128 KB多区域混合4 KB / 32 KB / 64 KB块 128 KB ~ 1 MBXIP原生最优地址直映射好需 cache / 预取不可需影子 RAM主谓引脚数40 ~ 50 根4 ~ 6 根复用 8 / 16 位28 ~ 48 根2 · 术语与缩写本章统一术语口径避免「扇区 / 块 / 区域 / 字」在文档与代码里指的不是同一件事。2.1 接口与命令术语缩写 / 术语全称本文中的含义Sector / Block扇区 / 块擦除的最小单位4 KB ~ 128 KB大小由器件决定RegionErase Block Region同尺寸扇区的集合CFI 0x2C 给出区域数0x2E 起逐区描述Word—x16 模式下的编程单位2 字节x8 模式下为 BytePA / PDProgram Address / Data编程命令最后两个周期给出的目标地址与数据SASector Address目标扇区内任意地址擦除 / 保护命令用它定位扇区Unlock Cycle解锁周期命令序列前置的0x555←AA/0x2AA←55写操作DQ7Data# Polling操作进行中读出「写入值 DQ7 的反码」完成后读出真值DQ6Toggle Bit 1操作进行中连续读会翻转完成后停止翻转DQ5Error / Timeout超出内部时序限制时置 1须二次确认后才判失败DQ3Erase Timer擦除命令窗口内 0真正开始擦除后 1DQ2Toggle Bit 2擦除挂起期间持续翻转与 DQ6 组合判断挂起状态DQ1Write Buffer Abort写缓冲装载了非法地址 / 跨扇区时置 1本次缓冲作废RY/BY#Ready / Busy开漏输出低 忙最省 CPU 的完成判据CFICommon Flash InterfaceJEDEC JEP137 / JESD68 定义的自描述查询区PPBPersistent Protection Bit非易失保护位写次数有限适合永久保护DYBDynamic Protection Bit易失保护位上电默认保护擦写前必须显式解除XIPeXecute In PlaceCPU 直接从 NOR 取指执行无需搬到 RAMRWWRead-While-Write一个 Bank 读的同时擦写另一个 Bank需器件支持A-1—x8 模式下由 DQ15 复用充当的最低位地址2.2 本文书写约定命令码用小写十六进制带后缀h书写如A0h、F0h写周期写作0x555 ← 0x00AA表示「向地址 0x555 写入数据 0x00AA」。x16 模式为默认示例x8 模式下的差异在 1.3 节与附录 A 单独标注。状态位写作DQ7/DQ6形式判据用掩码表示如(d1 ^ d2) 0x40判断 DQ6 是否翻转。时序符号沿用 datasheettACC地址到数据有效、tSE扇区擦除、tWHWH1单字编程、tWHWH2写缓冲编程。「典型值 / 最大值」成对给出时超时必须按最大值预算。代码示例为 C 伪代码省略 SoC 总线控制器配置只表达命令序列与判据。3 · 驱动架构与初始化并行 NOR 的驱动比串行器件多两件事总线时序配置与XIP 隔离。这两件事没做对后面的命令序列写得再标准也跑不起来。3.1 分层职责层职责禁止做的事应用层业务调用 read/write/ioctl不感知扇区与命令直接拼解锁周期、直接算扇区地址存储管理层扇区表、坏扇区表、保护状态、提交协议、IAP 流程绕过扇区表直接擦写物理地址命令协议层解锁周期、命令码、状态轮询、Reset 恢复省略解锁、用固定延时代替轮询总线抽象层等待周期、位宽、地址移位、XIP 隔离RAM 驻留在命令序列中途切换总线时序或频率命令协议层必须整体驻留 RAM发送解锁周期与轮询状态的代码本身不能放在被操作的 NOR 上执行——擦写期间从 NOR 取指读到的是状态位不是指令。 工程做法把nor_cmd()、nor_wait_ready()、nor_program()、nor_erase()用链接脚本放到 RAM 段如__attribute__((section(.ramfunc)))或整段用__ramfunc修饰。3.2 上电初始化流程初始化顺序不能颠倒先有时序后有识别。总线等待周期没配好就去读 CFI读回来的一定是噪声。上电初始化六步先配总线再识别器件最后解保护1. 上电与复位释放VCC 稳定 → RESET# 拉高VCC VLKO 期间操作被忽略RESET# 释放后需等 tRHµs ~ ms 级2. 配置外部总线位宽 / 等待周期 / 读写建立保持先把等待周期给足如 30 个成功后再二分收敛到最优值3. 读复位 F0h把器件拉回「读阵列」状态任何残留状态Autoselect / CFI / 旁路 / 错误都被清除4. CFI 查询读 QRY → 容量 / 区块表 / 时序参数读不到 QRY 即停机报障不猜、不硬编码5. Autoselect 校验 MID / DID与 BOM 预期比对防止贴错料不一致则拒绝启动并上报6. 建立扇区表 坏扇区表按需解除 DYB 保护保护按需解除、写完即恢复不做全局解除图 3-1 上电初始化六步。第 2 步与第 4 步的顺序不可颠倒等待周期不足时CFI 查询会读到噪声而噪声最容易被误判成「器件不兼容」。/* 上电初始化返回 0 表示成功 */ int nor_init(void) { /* 1. 复位释放后等待 tRH按 datasheet通常 µs ~ ms 级 */ board_reset_release(); delay_us(100); /* 2. 总线先给足等待周期后续可收敛 */ bus_config(BUS_WIDTH_16, WAIT_STATES_SAFE); /* 例如 30 个等待周期 */ /* 3. 读复位 */ nor_cmd(0x0000, 0x00F0); /* 4. CFI 查询 —— 读不到 QRY 直接失败 */ if (cfi_probe(g_cfi) ! 0) return -E_NODEV; if (g_cfi.interface 2 g_cfi.interface ! BUS_WIDTH_16) return -E_WIDTH; /* 位宽与配置不符 */ /* 5. Autoselect 校验厂商 / 器件 ID */ if (autoselect_check(EXPECT_MID, EXPECT_DID) ! 0) return -E_NODEV; /* 6. 构建扇区表 坏扇区表 */ sector_table_build(g_cfi); bad_sector_table_load(); return 0; }初始化最容易漏的两件事① 等待周期给得太紧。首版调试时先把等待周期设到最大例如 30 个确认 CFI 能读出来再二分收敛。 反过来做的话「读不到 QRY」会被误判成器件或焊接问题排查方向完全跑偏。② 忘了发 F0h 读复位。若上一次运行停在 Autoselect 或 CFI 模式例如看门狗复位前正在读 ID 本次上电后器件仍在特殊模式读出来的是 ID 或查询表而不是阵列数据。F0h 是唯一能把它拉回来的通用手段。3.3 器件识别CFI / Autoselect 双通道CFI 查询首选向0x55写0x0098x8 模式为向0xAA写0x98进入查询模式按偏移读取自描述信息。它给出容量、写缓冲深度、区块区域表、编程/擦除典型与最大超时、VCC 范围是驱动自适应多料号的唯一可靠来源。Autoselect校验用三周期进入0x555←AA/0x2AA←55/0x555←90读偏移 0x00 得制造商 ID、0x01 得器件 ID用于防贴错料。读完必须发 F0h 退出。交叉校验CFI 0x27 给出的容量应与 Autoselect 器件 ID 推断的容量一致不一致说明读到了噪声或贴错料应停机而非继续。什么时候必须读 CFI 而不是硬编码只要驱动需要兼容两家以上供应商或两种以上容量扇区布局、写缓冲深度、超时参数就必须来自 CFI。 硬编码的代价不是「换料要改代码」而是「换料后静默擦错扇区」——后者会烧出批量事故。4 · 命令体系与解锁周期并行 NOR 的所有写操作编程、擦除、识别、保护都遵循同一个骨架解锁周期 → 命令码 → 地址 / 数据。 命令码写错、解锁地址写错器件都会静默忽略——既不执行也不报错。4.1 命令集总览命令周期数地址序列x16数据序列x16读阵列 / 复位1任意0x00F0部分器件0x00FFAutoselect读 ID30x555 / 0x2AA / 0x5550x00AA/0x0055/0x0090CFI 查询10x0055x80x00AA0x0098字 / 字节编程40x555 / 0x2AA / 0x555 / PA0x00AA/0x0055/0x00A0/ PDUnlock Bypass20x555 / 0x2AA0x00AA/0x0020旁路编程2任意 / PA0x00A0/ PD旁路复位2任意 / 任意0x0090/0x0000写缓冲编程3 N0x555 / SA / SA0x00AA/0x0025/ (N−1)随后 N 字末周期0x0029扇区 / 块擦除60x555 / 0x2AA / 0x555 / 0x555 / 0x2AA / SAAA/55/80/AA/55/30整片擦除6同上末地址为 0x555… /0x0010擦除挂起 / 恢复1任意0x00B0/0x0030状态判读DQ 轮询1任意DQ7/DQ6/DQ5 轮询AMD 无 0x70/0x71 状态命令扇区保护PPB / DYB / Password为厂商自定义扩展命令序列各厂商不同必须查各自的 application note本文只给出软件层面的使用原则第 9 章。4.2 解锁周期与地址错位以字编程为例解锁周期 → 命令码 → 目标地址与数据四步缺一不可① 0x555← 0x00AA解锁周期 1② 0x2AA← 0x0055解锁周期 2③ 0x555← 0x00A0命令码编程④ PA← PD目标地址 数据命令码决定操作类型A0h 编程 · 80h 擦除建立 · 90h Autoselect · 98h CFI · 25h 写缓冲 · B0h 擦除挂起 · 70h 状态读换掉命令码即可换操作但前两个解锁周期永远不变x16 模式下解锁地址不再除以 2命令锁存比较的是地址总线上的值A[10:0] 0x555 时对应 SoC 字节地址 0xAAA。写成 0xAAA 或 0x2AA 都会让解锁失效且器件不报错。图 4-1 解锁周期与命令序列。前两个解锁周期是所有命令的共同前缀写错任何一个地址或数据整条命令被静默丢弃。/* 16 位总线命令写宏wa 为字地址SoC 侧自动右移 1 位输出 */ static volatile uint16_t *const nor (volatile uint16_t *)NOR_BASE; static void nor_cmd(uint32_t wa, uint16_t d) { nor[wa] d; } /* 单字编程解锁 → A0h → PA/PD */ int nor_program_word(volatile uint16_t *pa, uint16_t pd) { nor_cmd(0x555, 0x00AA); nor_cmd(0x2AA, 0x0055); nor_cmd(0x555, 0x00A0); *pa pd; /* 第 4 周期目标地址 数据 */ return nor_wait_ready(pa, pd, T_PROG_US); }4.3 读复位 F0h万能恢复键F0h是单周期命令可在任意地址写入作用是让器件从任何特殊模式Autoselect / CFI / 状态读 / 旁路 退回读阵列状态同时中止正在进行的编程或擦除。它是异常恢复的第一动作状态位异常、读不到正确数据、操作超时先发 F0h 再排查。部分器件也接受FFh优先用 F0h它是 CFI 0x0002 命令集的标准复位码。中止擦除后被操作的扇区处于不确定状态必须重新擦除不能直接使用。写缓冲编程中途发 F0h本次缓冲内容作废需重新装载。4.4 Unlock Bypass连续编程多个字时每次都发三个解锁周期会浪费约 30 % 的总线带宽。Unlock Bypass 让器件进入「已解锁」状态后续每个字只需 2 个周期。Unlock Bypass进入要 2 周期、退出要 2 周期中间每个字只要 2 周期读阵列普通命令需完整解锁AA / 55 / 命令码AA / 20hUnlock Bypass 模式每字只需A0h PA/PD批量写省约 30 % 开销90h / 00h读阵列恢复普通命令语义必须两次写忘了退出旁路模式的后果器件停留在旁路态后续普通命令如擦除、CFI被当成旁路编程整片数据可能被随机改写。退出必须发「0x0090 → 0x0000」两次写不是一次。图 5-1 Unlock Bypass 状态机。进入 2 周期AA / 20h退出 2 周期90h / 00h中间每个字的编程开销从 4 周期降到 2 周期。/* Unlock Bypass 批量编程进入 → N 个字 → 退出 */ int nor_program_bypass(volatile uint16_t *pa, const uint16_t *buf, size_t n) { nor_cmd(0x555, 0x00AA); nor_cmd(0x2AA, 0x0020); /* 进入旁路 */ for (size_t i 0; i n; i) { *pa 0x00A0; /* 旁路编程命令 */ pa[i] buf[i]; /* 第 2 周期地址 数据 */ if (nor_wait_ready(pa[i], buf[i], T_PROG_US) ! 0) { nor_bypass_reset(); /* 异常也要退出别把器件留在旁路 */ return -E_PFAIL; } } nor_bypass_reset(); /* 0x0090 → 0x0000 */ return 0; } static void nor_bypass_reset(void) { nor_cmd(0x0000, 0x0090); nor_cmd(0x0000, 0x0000); }4.5 写缓冲编程写缓冲是最高效的大块写入方式一次装载最多 16 ~ 32 字由 CFI 0x2A 给出再统一执行内部编程。装载的字数 N 必须写在第 3 周期的N−1位置写错会导致缓冲长度不符。所有装载地址必须落在同一个扇区内跨扇区会触发 DQ1 放弃标志本次缓冲作废。装载完成后必须写「缓冲编程确认」0x0029到扇区地址 SA内部编程才真正开始。缓冲编程的地址连续性要求各厂商略有差异是否要求严格连续递增必须查 datasheet。4.6 命令下发五步准则进入临界区XIP 下禁止取指RAM 执行 / 关中断 / 双 Bank并禁止其它任务抢占总线。下发解锁周期0x555 ← 0x00AA、0x2AA ← 0x0055x8 模式地址与数据宽度按 1.3 节换算。下发命令码与地址 / 数据严格按命令表的周期数不多发也不少发。轮询等待完成RY/BY# 或 DQ7 / DQ6并强制配 DQ5 二次确认第 8 章。退出与校验Autoselect / CFI / 旁路必须显式退出编程后回读比对擦除后做 Blank Check。命令序列中途被打断 命令作废解锁周期与命令码之间是状态机相关的连续写。若中间被中断服务程序插进一次对同一片选的访问哪怕只是一次读 解锁状态可能被破坏器件会把后续字节当成普通写——结果是「命令没生效而且扇区里多了几个莫名其妙的字」。对策把整个命令序列封装成关中断的临界区临界区内只访问 NOR 的命令地址不做任何其它总线操作。后续章节请下载「芯参谋」查看……篇幅原因, 还有17章· 详见芯参谋→方案设计当前分享仅开放前5章正文。详细资料请在芯参谋客户端中打开完整文档。打开路径解决方案应用市场分析 - 原理方案设计 - 并行NOR_PPI_NOR_软件设计规范 下载芯参谋客户端
返回列表