FPGA PS侧或软核 的 EXFAT文件系统

发布时间:2026/7/2 3:46:06
FPGA PS侧或软核 的 EXFAT文件系统 FPGA PS侧或软核 的 EXFAT文件系统1. 项目简介本项目基于 Xilinx Zynq UltraScale MPSoC 平台实现 FPGA 对多路 NVMe SSD 的访问并在软件侧提供 exFAT 文件系统能力。系统支持串口交互式exFAT shell用于完成多盘选择、挂载、格式化、容量查询、目录查看、文件读写、删除和性能测试同时也支持exFAT shell web版本上电后同时启动 Web 文件服务器和串口 shell可通过浏览器访问http://192.168.4.10对 NVMe exFAT 分区进行文件浏览、上传、下载和删除。从系统框图看用户可通过串口 shell 或 Web 页面进入 PS 侧应用程序PS 侧软件完成 exFAT 文件系统管理并通过 PL 侧 NVMe 相关逻辑、DDR4 缓冲和 PCIe 通道访问多块 NVMe SSD。当前测试记录中系统识别到 2 块 NVMe后续设计可扩展到更多 NVMe 盘。2. 测试素材ZU19EG 双盘挂载 exfatshell 例程裸机ZU19EG 双盘挂载 exfatshell web 管理例程FreeRTOS3. 测试环境项目说明FPGA/SoC 平台Zynq UltraScale MPSoC工程类型裸机/FreeRTOS 应用NVMe exFAT 文件系统测试NVMe 数量当前测试为 2 块Sector Size512 bytesDrive 0 最大传输262144 bytesDrive 1 最大传输524288 bytesWeb IP192.168.4.10Web 端口80启动时识别到的 NVMe 信息如下Expecting 2 drives... Connected to 2 drives! Drive 0 Info: Drive capacity is: 0x03b9e12b0 sectors Sector size is: 512 bytes Max Data Transfer size is: 262144 bytes Maximum Sector count is: 511 sectors Drive 1 Info: Drive capacity is: 0x03b9e12b0 sectors Sector size is: 512 bytes Max Data Transfer size is: 524288 bytes Maximum Sector count is: 1023 sectors4. 启动报文区分4.1 不带 Web 的 exFAT shell 启动报文不带 Web 的程序完成 NVMe 初始化后会先打印功能选择提示需要用户输入x后才进入 exFAT shell。Initialization complete Select x for exFAT shell, or d for original NVMe Host Demo: x Drive 0: mount failed: -3 Drive 0: no exFAT filesystem was found. Drive 1: mount failed: -3 Drive 1: no exFAT filesystem was found. exFAT shell mounted 0/2 detected drives. Current drive: 1.该报文说明Select x...是不带 Web 版本的入口选择提示。用户输入x后进入 exFAT shell。当 NVMe 未格式化为 exFAT 时首次挂载会失败并提示no exFAT filesystem was found。后续可通过f命令格式化当前盘再重新挂载。4.2 带 Web 的 exFAT shell web 启动报文带 Web 的程序完成 NVMe 初始化后不再等待x/d选择而是直接启动 Web 文件服务器和 exFAT shell。Initialization complete Starting Web file server and exFAT shell... Starting exFAT web server for 2/2 detected drives Drive 0: exFAT mounted Drive 1: exFAT mounted Start PHY autonegotiation autonegotiation complete link speed for phy address 7: 1000 Board IP: 192.168.4.10 Netmask : 255.255.255.0 Gateway : 192.168.4.1 Open http://192.168.4.10 HTTP socket server started on port 80 exFAT shell mounted 2/2 detected drives. Current drive: 1.该报文说明Starting Web file server and exFAT shell...是带 Web 版本的启动标志。Web server 与串口 exFAT shell 同时运行。网口协商为 1000 Mbps。浏览器访问地址为http://192.168.4.10。当前记录中 Drive 0 和 Drive 1 均已成功挂载。5. exFAT Shell 命令说明串口 shell 启动后会打印命令列表Commands: sselect drive, mmount/status, fformat current, iinfo/capacity, llist, ccat, wwrite text file, ddelete, bbenchmark menu, qquit命令功能说明s选择磁盘在多个 NVMe 之间切换当前操作盘m挂载/状态显示或重新挂载磁盘状态f格式化当前盘创建 MBR exFAT 分区会清空目标盘i信息/容量显示 NVMe 和 exFAT 卷容量、簇大小、空闲空间l列目录显示当前盘根目录文件c读取文本文件输入文件名后打印文件前若干字节w写文本文件创建一个短文本文件d删除文件删除当前盘指定文件b性能测试菜单支持单盘写、单盘读、写读校验、多盘并行写、多盘并行读q退出退出 shell6. Shell 功能测试6.1 多盘选择测试测试步骤启动不带 Web 的 exFAT shell 程序。输入x进入 shell。执行s查看磁盘状态。输入目标磁盘编号例如0或1。期望结果Drive status: drive 0: not mounted, sector512, max_lba0x000000003b9e12b0 * drive 1: not mounted, sector512, max_lba0x000000003b9e12b0 Select drive index (Enter keeps 1): 0 Current drive set to 0 (not mounted).判定标准当前 shell 提示符切换为目标盘例如exfat[0]或exfat[1]。6.2 未挂载状态目录查看测试测试步骤在未格式化或未挂载的磁盘上执行l。期望结果exfat[0] l Current drive 0 is not mounted. Use f to format, m to remount, or s to switch.判定标准程序应提示当前盘未挂载不应发生异常退出。6.3 格式化测试测试步骤选择待格式化磁盘例如 Drive 0。输入f。按提示输入FORMAT确认。期望结果WARNING: this will erase drive 0 and create a new MBR exFAT partition. Type FORMAT to continue: FORMAT Formatting selected NVMe drive as MBR exFAT... Partition start LBA: 2048 Partition sectors: 0x000000003b9e0ab1 Cluster size: 262144 bytes Format complete. Drive 0: mounted exFAT volume. Mounted formatted volume on drive 0.判定标准格式化完成后打印Format complete.。当前盘自动挂载成功。执行l可以正常列目录。注意f命令会擦除目标磁盘已有数据执行前必须确认目标盘编号。6.4 容量信息测试测试步骤在已挂载磁盘上执行i。期望结果NVMe drive capacity: 476.94 GiB exFAT volume capacity: 476.94 GiB exFAT used clusters: 3, free clusters: 1953507 exFAT volume start LBA: 0x0000000000000800 Sector bytes: 512 Sectors per cluster: 512 Cluster count: 1953510 Root cluster: 4 Bitmap cluster: 2判定标准容量、扇区大小、每簇扇区数、簇数量和根目录簇号能正常显示。6.5 文本文件写入和读取测试测试步骤在 Drive 1 上执行w。输入文件名1.txt。输入文本Hello SSD1!。执行l查看文件列表。执行c并输入1.txt读取文件内容。期望结果exfat[1] w New file name (max 15 ASCII chars): 1.txt One-line text: Hello SSD1! Created 1.txt on drive 1 exfat[1] c File name: 1.txt First 11 bytes: Hello SSD1!判定标准文件创建成功读取内容与写入内容一致。6.6 删除文件测试测试步骤在 Drive 1 上执行d。输入1.TXT。执行l确认文件不存在。期望结果exfat[1] D Delete file name: 1.TXT Deleted 1.TXT from drive 1判定标准删除命令返回成功目录列表中不再显示被删除文件。7. Benchmark 测试7.1 Benchmark 菜单执行b后进入性能测试菜单Benchmark mode: 1Write, 2Read, 3WriteReadVerify, 4ParallelWrite, 5ParallelRead (Enter3):模式名称测试内容1Write在当前盘创建测试文件并写入指定大小数据2Read读取指定测试文件可重复多次3WriteReadVerify写入、读取并进行完整校验4ParallelWrite多盘并行写入5ParallelRead多盘并行读取7.2 单盘写测试记录Drive 1测试条件为 256 MiB重复 10 次Benchmark drive 1 file: B000.BIN, modeWrite, test1/10, size256 MiB, qd8, cmd128 KiB Write tests completed: 10/10 Total: 2560 MiB, bytes0x00000000a0000000, 20480 commands, 799116 us, avg 39019 ns/cmd, 3203.53 MiB/sDrive 0测试条件为 128 MiB重复 5 次Write tests completed: 5/5 Total: 640 MiB, bytes0x0000000028000000, 5120 commands, 186772 us, avg 36478 ns/cmd, 3426.63 MiB/s判定标准每次写入均生成对应Bxxx.BIN文件最终输出Write tests completed和Total汇总。7.3 单盘读测试记录Drive 1读取B000.BIN重复 10 次Read tests completed: 10/10 Total: 2560 MiB, bytes0x00000000a0000000, 20480 commands, 760128 us, avg 37115 ns/cmd, 3367.85 MiB/sDrive 0读取B000.BIN重复 5 次Read tests completed: 5/5 Total: 640 MiB, bytes0x0000000028000000, 5120 commands, 183157 us, avg 35772 ns/cmd, 3494.26 MiB/s判定标准每次读取无错误最终输出Read tests completed和Total汇总。7.4 写读校验测试记录Drive 1测试条件为 128 MiBBenchmark drive 1 file: B010.BIN, modeWriteReadVerify, size128 MiB, qd8, cmd128 KiB Write: 134217728 bytes, 1024 commands, 42927 us, avg 41919 ns/cmd, 2981.87 MiB/s Read: 134217728 bytes, 1024 commands, 38117 us, avg 37223 ns/cmd, 3358.08 MiB/s Verify: 134217728 bytes, 1024 commands, 61938120 us, avg 60486444 ns/cmd, 2.06 MiB/s Total: 402653184 bytes, 3072 commands, 62062755 us, avg 20202719 ns/cmd, 0.51 MiB/s判定标准Write 和 Read 阶段完成且无错误。Verify 阶段完成且未报校验失败。Verify 为完整数据校验速度明显低于纯读写属于预期现象。7.5 多盘并行写测试记录测试条件为 2 块盘并行每盘 64 MiB重复 5 次ParallelWrite drives: 0 1 ParallelWrite test 1/5, drives2, per-drive64 MiB, qd8, cmd128 KiB ParallelWrite tests completed: 5/5 Total: 640 MiB, bytes0x0000000028000000, 5120 commands, 132662 us, avg 25910 ns/cmd, 4824.29 MiB/s判定标准所有已挂载盘均参与并行写入最终输出ParallelWrite tests completed和Total汇总。7.6 多盘并行读测试记录测试条件为 2 块盘并行读取B000.BIN重复 5 次ParallelRead drives: 0:B000.BIN 1:B000.BIN ParallelRead test 1/5, drives2, qd8, cmd128 KiB ParallelRead tests completed: 5/5 Total: 1920 MiB, bytes0x0000000078000000, 15360 commands, 488476 us, avg 31801 ns/cmd, 3930.59 MiB/s判定标准所有已挂载盘读取完成无文件不存在、读失败或校验错误。7.7 Benchmark 汇总测试项条件结果Drive 1 Write256 MiB x 103203.53 MiB/sDrive 1 Read256 MiB x 103367.85 MiB/sDrive 1 WriteReadVerify128 MiB x 1Write 2981.87 MiB/sRead 3358.08 MiB/sVerify 2.06 MiB/sDrive 0 Write128 MiB x 53426.63 MiB/sDrive 0 Read128 MiB x 53494.26 MiB/sParallelWrite2 drives每盘 64 MiB x 54824.29 MiB/sParallelRead2 drives读取 B000.BIN x 53930.59 MiB/s以上速度来自串口测试记录中的软件计时输出复测时应以当前固件版本、NVMe 型号、PCIe 链路状态和缓存策略下的实测结果为准。8. Web 功能测试8.1 Web 启动检查测试步骤下载带 Web 的程序。观察串口启动报文。确认打印Open http://192.168.4.10。PC 网口设置到同一网段后浏览器访问http://192.168.4.10。期望结果Starting Web file server and exFAT shell... Starting exFAT web server for 2/2 detected drives Board IP: 192.168.4.10 Open http://192.168.4.10 HTTP socket server started on port 80判定标准串口 shell 可继续输入命令。Web 页面可打开。Web 页面顶部显示已配置磁盘数量和已检测磁盘数量。8.2 Web 页面 Drive 0 测试测试内容浏览器打开http://192.168.4.10。页面顶部显示NVMe exFAT Web。页面显示2 configured drives, 2 detected。Drive 0 和 Drive 1 均显示mounted。下拉框选择Drive 0 - mounted。文件列表刷新为 Drive 0 的文件。截图中 Drive 0 显示字段示例值Capacity488386.34 MiBUsed961.00 MiBFree487416.50 MiBBlock512 bytes判定标准Drive 0 卡片高亮文件列表显示 Drive 0 下的B000.BIN、B001.BIN、0.txt等文件。8.3 Web 页面 Drive 1 测试测试内容在同一页面下拉框选择Drive 1 - mounted。页面不跳转文件列表切换为 Drive 1 的文件。Drive 1 卡片高亮。可对 Drive 1 文件执行下载、上传和删除操作。截图中 Drive 1 显示字段示例值Capacity488386.34 MiBUsed3008.75 MiBFree485368.75 MiBBlock512 bytes判定标准Drive 1 文件列表显示B000.BIN至B013.BIN等文件且 Size 列以 MiB 显示。8.4 Web 文件操作测试功能操作步骤期望结果切换磁盘使用Disk下拉框选择 Drive 0 或 Drive 1当前磁盘卡片高亮文件列表刷新为对应磁盘上传文件选择文件后点击Upload文件上传到当前选择磁盘完成后刷新列表单文件下载点击文件行右侧download浏览器开始下载该文件批量下载勾选多个文件后点击Download selected浏览器依次触发多个文件下载批量删除勾选多个文件后点击Delete selected并确认选中文件从当前磁盘删除页面刷新注意Web 页面中的批量删除会直接删除当前选择磁盘上的目标文件测试前应确认磁盘选择框是否指向正确 Drive。9. 测试结论根据现有测试记录本次 exFAT shell 和 exFAT shell web 功能验证结果如下测试项结论NVMe 链路初始化通过2 块 NVMe 均识别成功多盘状态显示通过可显示 Drive 0/Drive 1 状态多盘切换通过s命令可切换当前操作盘exFAT 格式化通过Drive 0/Drive 1 均可格式化并挂载容量查询通过可显示 NVMe 容量和 exFAT 卷信息目录查看通过l命令可列出根目录文件文本写入/读取通过w和c命令验证成功文件删除通过d命令可删除指定文件单盘写测速通过Drive 0/Drive 1 均完成测试单盘读测速通过Drive 0/Drive 1 均完成测试写读校验通过完整校验完成多盘并行写通过2 块盘并行写完成多盘并行读通过2 块盘并行读完成Web server 启动通过可打开http://192.168.4.10Web 多盘文件列表通过可通过下拉框切换 Drive 0/Drive 1Web 文件上传/下载/删除通过页面提供对应操作入口综合判断当前工程已具备多 NVMe exFAT 文件系统的基础管理能力、串口交互测试能力、Web 文件管理能力和单盘/多盘读写性能测试能力可作为后续多盘扩展和 Web 文件服务优化的测试基线。10. 复测注意事项执行f格式化前必须确认当前提示符中的磁盘编号例如exfat[0]或exfat[1]。Web 页面文件操作依赖当前下拉框选择的 Drive删除和上传前应确认目标盘。性能测试前应确认磁盘剩余容量足够避免写入中途失败。多盘并行测试要求参与测试的磁盘均已挂载。Web 访问前需确认 PC 与开发板处于同一网段开发板 IP 为192.168.4.10。Benchmark 结果会受 NVMe 型号、PCIe 链路、DDR 缓冲、缓存策略和当前固件版本影响。