《SD卡控制系统.pdf》由会员分享,可在线阅读,更多相关《SD卡控制系统.pdf(13页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 103324589 A (43)申请公布日 2013.09.25 CN 103324589 A *CN103324589A* (21)申请号 201310259422.6 (22)申请日 2013.06.26 G06F 13/16(2006.01) (71)申请人 四川九洲电器集团有限责任公司 地址 621000 四川省绵阳市九华路 6 号 (72)发明人 杨其聪 朱磊 (74)专利代理机构 北京万慧达知识产权代理有 限公司 11111 代理人 段晓玲 杨颖 (54) 发明名称 SD 卡控制系统 (57) 摘要 本发明涉及嵌入式系统技术领域, 公开了一 种 SD 卡控。
2、制系统。该系统采用 SOPC 架构, 包括 : 封装在同一 FPGA 器件中的内核和 SD 卡控制器模 块, 其中, 所述内核为基于 Avalon 总线的嵌入式 处理器, 通过 Avalon 总线模式访问所述 SD 卡控 制器模块 ; 所述SD卡控制器模块被封装成Avalon 总线的存储器映射从端口, 作为嵌入式外围设备 供所述内核访问 ; 所述 SD 卡控制器模块还通过 SPI 总线连接 SD 卡, 将所述内核的访问指令转化 为对SD卡的数据交互处理。 本发明在一个芯片上 实现了控制器硬件与 CPU 的融合, 在产品设计上 减少了 PCB 设计的复杂程度, 减小了开发难度, 节 约了设计成本。
3、, 提高了产品的生命周期。 (51)Int.Cl. 权利要求书 2 页 说明书 8 页 附图 2 页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书2页 说明书8页 附图2页 (10)申请公布号 CN 103324589 A CN 103324589 A *CN103324589A* 1/2 页 2 1. 一种 SD 卡控制系统, 其特征在于, 所述系统采用 SOPC 架构, 包括 : 封装在同一 FPGA 器件中的内核和 SD 卡控制器模块, 其中, 所述内核为基于 Avalon 总线的嵌入式处理器, 通过 Avalon 总线模式访问所述 SD 卡控 制器模块 ; 所。
4、述 SD 卡控制器模块被封装成 Avalon 总线的存储器映射从端口, 作为嵌入式外围设 备供所述内核访问 ; 所述SD卡控制器模块还通过SPI总线连接SD卡, 将所述内核的访问指 令转化为对 SD 卡的数据交互处理。 2. 根据权利要求 1 所述的系统, 其特征在于, 所述 SD 卡控制器模块包括 : SD卡访问工作逻辑单元, 通过硬件逻辑控制SD卡的初始化、 读、 写、 擦除操作, 完成SPI 总线模式下与 SD 卡的数据交互 ; 寄存器单元分配模块, 配置和控制内部寄存器单元, 使内核通过 Avalon 总线接口访问 寄存器单元来控制所述工作逻辑单元 ; Avalon 总线从设备接口, 。
5、与内核通过 Avalon 总线进行交互, 使内核能够访问到硬件内 部寄存器单元, 并对其进行读 / 写操作以控制所述工作逻辑单元。 3. 根据权利要求 1 所述的系统, 其特征在于, 所述内核和所述 SD 卡控制器模块构成所 述系统的硬件层, 所述系统还包括驱动层、 应用程序接口层和用户层, 其中, 所述驱动层完成系统的硬件抽象, 提供设备的驱动程序供上层应用访问所述硬件层 ; 所述应用程序接口层为所述用户层的应用调用所述驱动程序提供驱动函数接口 ; 所述用户层提供数据管理应用, 基于用户的需求产生 SD 卡数据的控制指令。 4. 根据权利要求 3 所述的系统, 其特征在于, 所述驱动层的所述。
6、驱动程序根据所述 SD 卡控制器模块中寄存器的配置情况基于 HAL 开发。 5. 根据权利要求 1 所述的系统, 其特征在于, 所述 SD 卡控制器模块采用 Verilog 硬件 描述语言实现。 6. 根据权利要求 1 所述的系统, 其特征在于, 所述内核为嵌入式软核处理器。 7.根据权利要求1所述的系统, 其特征在于, 所述FPGA器件为Altera FPGA器件, 所述 内核为 Nios 处理器。 8. 根据权利要求 2 所述的系统, 其特征在于, 所述 SD 卡访问工作逻辑单元包括 : SD 卡 初始化模块、 SD 卡寄存器读模块、 SD 卡写操作模块、 SD 卡读操作模块和 SD 卡的。
7、擦除操作模 块, 其中, 所述 SD 卡初始化模块设置了控制寄存器和状态寄存器, 为用户应用提供对 SD 卡初始 化进程的控制和状态掌握 ; 所述 SD 卡寄存器读模块设置了控制寄存器、 状态寄存器和读数据缓冲器, 完成对当前 SD 卡的工作条件寄存器、 卡描述数据寄存器和卡识别码寄存器的状态信息读取 ; 所述 SD 卡写操作模块设置了控制器寄存器、 状态寄存器和写数据缓冲器, 根据用户应 用的写数据需求, 向写数据缓冲器写入至少一块的数据信息后自动完成向 SD 卡写数据流 程, 并向内核提交此次写操作的结果报告信息 ; 所述 SD 卡读操作模块设置了控制寄存器、 状态寄存器和读数据缓冲器, 。
8、根据用户应用 发出具体的读需求信息, 自动完成对 SD 卡的信息读取后指示内核对读数据缓冲器进行读 取, 并向内核提交此次读操作的结果报告信息 ; 权 利 要 求 书 CN 103324589 A 2 2/2 页 3 所述 SD 卡的擦除操作模块设置了控制器寄存器和状态寄存器, 根据用户应用对 SD 卡 数据块的擦除请求自动进行数据擦除操作, 完成后提交擦除的结果报告信息。 9. 根据权利要求 1 所述的系统, 其特征在于, 所述系统还包括 : JTAG 接口和存储器接 口。 10. 根据权利要求 1 所述的系统, 其特征在于, 所述系统还包括 : 至少一个使用 C 语言 至硬件加速编译器生成。
9、的协处理器。 权 利 要 求 书 CN 103324589 A 3 1/8 页 4 SD 卡控制系统 技术领域 0001 本发明涉及嵌入式系统技术领域, 特别涉及一种 SD 卡控制系统。 背景技术 0002 随着电子工艺的进步, 现代集成电路的集成度越来越高, 电子设备和工控仪器等 也越来越趋向于小型化、 低功耗和多功能化, 但同时要以更小的体积和功耗应对复杂环境 下的数据采集和处理, 对这些设备仪器的存储功能也有着越来越高的要求。SD 卡 (Secure Digital Memory Card) 是一种基于半导体快闪存储器的存储设备, 经过近些年的市场竞 争, 已经逐渐取代了 SM 卡 (S。
10、martMedia) 、 CF 卡 (Compact Flash) 、 MMC 卡 (MultiMediaCard) 和记忆棒 (Memory Stick) 等闪存设备, 成为当前最主流的小型非易失性存储设备。 0003 SD 卡由于具备容量大、 传输速率高、 功耗低和体型小巧等优点, 被广泛用于手机、 数码相机等消费类电子设备以及工控仪器中, 也逐渐被大多数嵌入式系统所采用。但对于 嵌入式系统来说, 体型、 功耗和成本一直是系统需要严格控制的问题。目前, 在众多的具备 SD 卡接口访问功能的产品中, 一般都采用专用控制芯片来实现 SD 卡的读写控制。由于 SD 卡规范是几家生产厂商联合推出的。
11、规范, 其控制芯片的研发和生产也由这些厂商所掌控, 在嵌入式产品中采用这些专用控制芯片除了要支付额外的授权费用外, 还需要在产品中预 留出控制芯片的布设空间和电路走线, 产品体积难以控制还明显增加了产品的硬件资源开 销、 设计成本和设计复杂度。 此外, 独立的芯片还需要额外的电能供应, 增大了产品功耗 ; 要 想升级 SD 卡控制功能也只能依靠调整芯片进行, 显然不能很好地满足今后产品的升级需 求。可见, 现有的独立控制芯片方式并不适用于将 SD 卡应用于嵌入式系统中。 发明内容 0004 (一) 要解决的技术问题 0005 针对现有技术的上述缺陷, 本发明为了解决现有技术中采用独立芯片控制 。
12、SD 卡 不适用于嵌入式系统的技术问题, 提供了一种 SD 卡控制系统。 0006 (二) 技术方案 0007 为实现上述目的, 本发明采用如下技术方案 : 0008 一方面, 本发明提供一种SD卡控制系统, 所述系统采用SOPC架构, 包括 : 封装在同 一 FPGA 器件中的内核和 SD 卡控制器模块, 其中, 0009 所述内核为基于 Avalon 总线的嵌入式处理器, 通过 Avalon 总线模式访问所述 SD 卡控制器模块 ; 0010 所述 SD 卡控制器模块被封装成 Avalon 总线的存储器映射从端口, 作为嵌入式外 围设备供所述内核访问 ; 所述SD卡控制器模块还通过SPI总。
13、线连接SD卡, 将所述内核的访 问指令转化为对 SD 卡的数据交互处理。 0011 优选地, 所述 SD 卡控制器模块包括 : 0012 SD 卡访问工作逻辑单元, 通过硬件逻辑控制 SD 卡的初始化、 读、 写、 擦除操作, 完 说 明 书 CN 103324589 A 4 2/8 页 5 成 SPI 总线模式下与 SD 卡的数据交互 ; 0013 寄存器单元分配模块, 配置和控制内部寄存器单元, 使内核通过 Avalon 总线接口 访问寄存器单元来控制所述工作逻辑单元 ; 0014 Avalon 总线从设备接口, 与内核通过 Avalon 总线进行交互, 使内核能够访问到硬 件内部寄存器单。
14、元, 并对其进行读 / 写操作以控制所述工作逻辑单元。 0015 优选地, 所述内核和所述 SD 卡控制器模块构成所述系统的硬件层, 所述系统还包 括驱动层、 应用程序接口层和用户层, 其中, 0016 所述驱动层完成系统的硬件抽象, 提供设备的驱动程序供上层应用访问所述硬件 层 ; 0017 所述应用程序接口层为所述用户层的应用调用所述驱动程序提供驱动函数接 口 ; 0018 所述用户层提供数据管理应用, 基于用户的需求产生 SD 卡数据的控制指令。 0019 优选地, 所述驱动层的所述驱动程序根据所述 SD 卡控制器模块中寄存器的配置 情况基于 HAL 开发。 0020 优选地, 所述 S。
15、D 卡控制器模块采用 Verilog 硬件描述语言实现。 0021 优选地, 所述内核为嵌入式软核处理器。 0022 优选地, 所述 FPGA 器件为 Altera FPGA 器件, 所述内核为 Nios 处理器。 0023 优选地, 所述SD卡访问工作逻辑单元包括 : SD卡初始化模块、 SD卡寄存器读模块、 SD 卡写操作模块、 SD 卡读操作模块和 SD 卡的擦除操作模块, 其中, 0024 所述 SD 卡初始化模块设置了控制寄存器和状态寄存器, 为用户应用提供对 SD 卡 初始化进程的控制和状态掌握 ; 0025 所述 SD 卡寄存器读模块设置了控制寄存器、 状态寄存器和读数据缓冲器,。
16、 完成对 当前 SD 卡的工作条件寄存器、 卡描述数据寄存器和卡识别码寄存器的状态信息读取 ; 0026 所述 SD 卡写操作模块设置了控制器寄存器、 状态寄存器和写数据缓冲器, 根据用 户应用的写数据需求, 向写数据缓冲器写入至少一块的数据信息后自动完成向 SD 卡写数 据流程, 并向内核提交此次写操作的结果报告信息 ; 0027 所述 SD 卡读操作模块设置了控制寄存器、 状态寄存器和读数据缓冲器, 根据用户 应用发出具体的读需求信息, 自动完成对 SD 卡的信息读取后指示内核对读数据缓冲器进 行读取, 并向内核提交此次读操作的结果报告信息 ; 0028 所述 SD 卡的擦除操作模块设置了。
17、控制器寄存器和状态寄存器, 根据用户应用对 SD 卡数据块的擦除请求自动进行数据擦除操作, 完成后提交擦除的结果报告信息。 0029 优选地, 所述系统还包括 : JTAG 接口和存储器接口。 0030 优选地, 所述系统还包括 : 至少一个使用 C 语言至硬件加速编译器生成的协处理 器。 0031 (三) 有益效果 0032 本发明的方案中, 在一个芯片上实现了控制器硬件与 CPU 的融合, 优化了 SD 卡产 品应用的硬件开销, 降低了设计成本和开发难度, 延长了产品生命周期, 设计灵活且容易实 现。 说 明 书 CN 103324589 A 5 3/8 页 6 附图说明 0033 图 1。
18、 是本发明的一个实施例中系统的模块结构示意图 ; 0034 图 2a、 图 2b 是本发明的一个优选实施例中系统主要硬件模块的对外接口关系结 构示意图。 具体实施方式 0035 下面将结合本发明实施例中的附图, 对本发明实施例中的技术方案进行清楚、 完 整地描述, 显然, 所描述的实施例是本发明的一部分实施例, 而不是全部的实施例。基于本 发明中的实施例, 本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他 实施例, 都属于本发明保护的范围。 0036 微电子技术的发展成果为 SOC(System on Chip, 片上系统) 的实现提供了多种途 径, SOC 是一种集成度较高的系。
19、统级芯片, 其在体积、 功耗和系统功能上均较传统嵌入式系 统有较大优势 ; 但同时, 要想在单一芯片上实现软硬件的高度集成, 需要进行大量的硬件逻 辑、 软硬件协同、 系统应用的设计和验证, 这无形中又增大了 SOC 产品的生产投入。对于经 过验证而又具有批量需求的系统芯片, 可以做成 ASIC (Application Specific Integrated Circuit, 专用集成电路) 而大量生产以控制成本 ; 但对于一些仅为小批量应用或处于开发 阶段的 SOC, 若马上投入流片生产, 则需要投入较多的资金, 承担较大的试制风险。最近发 展起来的 SOPC(System on a Pr。
20、ogrammable Chip, 可编程片上系统) 技术为成本控制提供 了另一种有效的解决方案, 即用 FPGA(Field Programmable Gate Array, 现场可编程门阵 列) 作为实现 SOC 的硬件载体。 0037 采用 SOPC 技术的优势, 本发明实现了不通过独立控制芯片即可进行 SD 卡读写的 嵌入式系统。本发明在 FPGA 上实现了从硬件层至用户层的逐层级设计开发, 完全只在一个 FPGA 上完成了 SD 卡控制、 外设驱动和嵌入式应用 ; 本发明的系统具备通用 SD 卡接口访问 能力, 可根据访问需求灵活配置 CPU 系统, 访问效率高, 实现方法简单。 00。
21、38 在本发明的技术方案中, 采用 Altera 的 FPGA 器件, 使用 Verilog 硬件描述语言 设计实现基于 SPI(Serial Peripheral Interface, 串行外设接口) 总线的 SD 卡控制器模 块, 该模块支持最新的 SD 卡物理层规范 V2.0, 并可根据需求进行升级, 根据 Avalon 总线规 范进行设计, 满足对 SD 卡的基本控制。其中, 运用最新软件开发平台 Quartus II 的 SOPC Builder 开发工具, 选择经济型内核来构造一个基于 Avalon 总线的处理器, 把 SD 卡控制器 模块封装成 Avalon 存储器映射从端口, 。
22、作为嵌入式外围设备以供处理器访问。针对上述封 装形式, 开发设备驱动并将其综合到 HAL(Hardware Abstraction Layer, 硬件抽象层) 框 架中 ; 编写 HAL API 函数, 在集成开发环境 (IDE) 下使用标准的 C 函数库或者 API 函数实现 对 SD 卡的基本操作, 如 SD 卡初始化、 读写数据、 擦除等。同时, 为了提高软件程序执行的性 能, 使用 C 语言至硬件加速编译器 (C2H 编译器) 作为 FPGA 的定制协处理器, 用于协助 CPU 同时处理多个数据块, 编写加速代码使控制程序效能提升在10倍以上, 并且结合Avalon交 换架构的互联技术。
23、, 可实现大吞吐量应用, 很好地满足对大容量 SD 卡的高效访问需求。 0039 在本发明优选的实施例中, 采用 Nios 处理器作为核心的 FPGA 内核, Nios 处 理器是 Altera 公司的第二代用户可配置的通用 32 位 RISC(Reduced Instruction Set Computing, 精简指令集) 嵌入式微处理器, 是 Altera 公司特有的基于通用 FPGA 架构的软 说 明 书 CN 103324589 A 6 4/8 页 7 CPU 内核, 具有超过 300MIPS(Million Instructions Per Second, 百万指令每秒) 的性能。。
24、 在植入 FPGA 之前, 用户可以根据设计要求, 对 Nios 及其外围系统进行定制, 使该嵌入式 系统在硬件结构、 功能特点、 资源占用等方面全面满足用户系统设计的要求。只要 FPGA 资 源允许, Nios软核在同一FPGA中被植入的数量没有限制 ; 此外, 由于Nios是由Altera 公司直接推出而非第三方产品, 用其定制的产品无需再支付额外的授权费用。 0040 更具体地, 参见图 1, 其是本发明的一个实施例中的系统架构模块图, 在该实施例 中采用逐层级开发方式实现各层的功能模块, SD存储卡 (本实施例中采用8GB Kingston SD 卡) 通过 SPI 总线与 Alter。
25、a 的 Cyclone III FPGA 器件进行数据通信, FPGA 内部完成了从 底层硬件层到顶层用户层的数据处理。 图1中, 在硬件层完成了Nios处理器硬件平台 (即 SOPC 系统) 的构建, 其主要是对 SPI 总线的 SD 卡控制器模块实现, 该模块基于 Avalon 总线 规范, 采用 Verilog 硬件描述语言实现, 负责接收 Nios 处理器的用户指令而对 SD 卡直接 进行访问。SD 卡控制器模块的整个结构又主要由三部分组成 : SD 卡访问工作逻辑单元, 完 成 SPI 模式下与 SD 卡的数据交互机制 ; 寄存器单元分配模块, Avalon 总线接口通过访问寄 存器。
26、单元来控制工作逻辑部分 ; Avalon 总线从设备接口, 通过该接口使处理器能够访问到 硬件内部寄存器, 并且对其进行读 / 写操作来控制工作逻辑部分。 0041 进一步参见图 2, 该图描述了本发明中主要硬件模块顶层的对外接口关系, 其中, 图 2a 是 SD 卡控制器模块顶层对外接口关系, 图 2b 是 Nios 处理器硬件顶层对外接口关 系。 0042 在图 2a 中描绘了用 Verilog 语言实现的 SD 卡控制器模块的顶层对外接口关系的 一个实例, 图2b则体现了图2a基于NiosII处理器在FPGA内部的模块化的一个实例, 图2b 说明了图 2a 的 SD 卡控制器模块在 FP。
27、GA 内部和其他用户模块的接口关系。SD 卡控制器模 块通过 SPI 总线对 SD 卡进行操作, 通过 Avalon 总线与 Nios 处理器相连接收处理器的控制 信号并在处理器与 SD 卡之间进行数据通信。具体地, 在该 SD 卡控制器模块中, 与 SD 卡进 行物理连接的线路信号和作为 Avalon_MM(Avalon 存储器映射) 从端口的线路信号的定义 及具体描述见表 1 所示。 0043 信号类型宽度方向描述 CS1到 SD 卡SD 卡的片选输入信号 DI1到 SD 卡SD 卡的数据输入信号 SCLK1到 SD 卡SD 卡的时钟输入信号 VSS21到 SD 卡SD 卡的电源地信号 D。
28、O1到 SD 卡SD 卡的数据输出信号 reset1来自 Avalon 总线全局复位信号 clk1来自 Avalon 总线Avalon 从端口的同步时钟 说 明 书 CN 103324589 A 7 5/8 页 8 slave_chipselect1来自 Avalon 总线Avalon 从端口的片选信号 slave_address8来自 Avalon 总线Avalon 从端口的地址信号线 0044 slave_write1来自 Avalon 总线写请求信号 slave_writedata32来自 Avalon 总线对应写请求的数据总线 slave_read1来自 Avalon 总线读请求信号 。
29、slave_readdata32到 Avalon 总线对应读请求的数据总线 0045 表 1SD 卡控制器模块中线路信号的定义及具体描述 0046 本发明中, SD 卡控制器需要为 SD 卡提供工作时钟 SCLK, 按照 SD 卡最新的物理层 规范V2.0完成一系列对SD卡的访问操作, 即对SD卡的访问工作逻辑 ; 同时, 模块内部针对 SD 卡的初始化、 读、 写、 擦除等功能操作模块, 分别定义多个寄存器单元, 并且编写 Avalon 总线接口机制, 定义 Avalon_MM 从端口来提供合适的控制机制以及足够的带宽, 其中设置 读 / 写为零等待周期也就是读 / 写寄存器仅需要一个时钟周。
30、期, 读和写没有建立、 保持约 束, 且读不需要延时, 最大效率地提高了系统性能。最终顶层 Nios 处理器的用户程序可 以通过 Avalon 总线从设备接口对 SD 卡控制器模块发出指令 (也就是从用户层来控制了硬 件层的工作) , 控制器就可硬件自动化地发出命令 (通过 DI 管脚) 和接收 SD 卡的响应 (通过 DO 管脚) , 并且根据用户程序具体的读写数据请求进行数据的发送和接收, 实现用户对 SD 卡的高效访问。 0047 在本发明一个优选的实施例中, 对图 2a 中的 RTL(Register Transfer Layer, 寄 存器传输层) 功能模块主要包含以下五个主要功能模。
31、块 : 0048 SD 卡初始化模块, 本模块设置了控制寄存器和状态寄存器, 用于用户程序对初 始化进程的控制和初始化过程的状态掌握。模块设计从上电复位检测到卡开始, 按照命 令 - 回答的 SD 卡 SPI 模式通信机制自动实现一系列的初始化流程, 最终确定 SD 卡的版本 状态, 提交初始化过程信息报告给 CPU, 供用户程序对卡进行诊断并且确定下一步的可操作 性。 0049 SD 卡寄存器读模块, 本模块设置了控制寄存器、 状态寄存器和读数据缓冲器, 主 要用于完成对当前 SD 卡的 OCR(Operating Conditions Register, 工作条件寄存器) 、 CSD(Ca。
32、rd Specific Data Register, 卡描述数据寄存器) 和 CID(Card Identification Register, 卡识别码寄存器) 各寄存器的状态信息读取, 这些关键的卡信息将作为下一步对 SD 卡进行读写的主要约束条件。 0050 SD 卡写操作模块, 本模块设置了控制器寄存器、 状态寄存器和写数据缓冲器, 根据 用户的写数据需求, 在顶层用户程序里往写数据缓冲器写入块 / 多块的数据信息, 本模块 自动产生写数据流程, 并向 CPU 提交此次写操作的结果报告信息。 0051 SD 卡读操作模块, 本模块设置了控制寄存器、 状态寄存器和读数据缓冲器, 用户在 。
33、顶层用户程序里发出具体的读需求信息, 本模块自动完成对SD卡的信息读取后指示CPU对 说 明 书 CN 103324589 A 8 6/8 页 9 读数据缓冲器的读取, 过程中同样向 CPU 提交此次读操作的结果报告信息。 0052 SD 卡的擦除操作模块, 本模块设置了控制器寄存器和状态寄存器, 根据用户对 SD 卡数据块的擦除请求情况自动进行数据擦除操作, 完成后提交擦除的结果报告信息。 0053 以上功能模块中的所有寄存器详细分配信息见表 2 所示。 0054 0055 表 2SD 卡控制器模块中寄存器分配信息 0056 通过以上5个主要功能模块对SD卡控制器的硬件实现, 随后通过SOP。
34、C Builder中 Component Editor (组件编辑器) 把 SD 卡控制器封装成一个设备组件。封装时, 组件编辑器 的 HDL Files 选项卡导入 SD 卡控制器硬件实现的全部 Verilog 源文件 ; Signals 选项卡设 置了顶层组件 SD 卡控制器模块中每个信号的用途, 包括接口类型和信号类型 ; Interfaces 选项卡将每一个信号分配到各个接口, 并且根据SD卡控制器模块中对Avalon_MM从设备接 口的时序设计, 修改时序约束参数, 真正最大效率提高了对 SD 卡控制器的访问效率。 0057 本发明的实施例还在 SOPC Builder 中创建的 N。
35、ios CPU 架构, CPU 架构中同时 添加了片上存储器资源和 JTAG 调试从设备模块, 至此构成了一个完整的典型 SD 卡控制器 Nios CPU 硬件系统。 0058 完成处理器硬件平台的构建后, 由于用户程序不能直接访问硬件, 因此需要创建 设备驱动程序。驱动程序的开发是基于 HAL, 并且依赖于 SD 卡控制器模块中各个寄存器的 配置情况。实现 SD 卡驱动程序的功能后, 集成该设备驱动程序到 HAL 框架环境中, 用户就 可以使用高级 HAL API 驱动函数来访问底层硬件, 这样可使代码更加稳定并且可移植到其 他具有不同硬件配置的 Nios 系统中。构建完硬件系统后, 就可以。
36、在此基础上结合用户的 具体使用需求开发应用程序, 也就是对 SD 卡设备进行读、 写、 擦除等访问操作。用户应用程 序的开发是在 Nios IDE 集成开发环境下进行, 代码可采用简洁的 C 语言进行编写, 操作 的细则遵从 SD 卡控制器模块中寄存器的配置情况。本实施例中为提高对 SD 卡的访问效 率, SD 卡控制器模块中对 Avalon 总线的读写访问操作采用零等待周期、 无读 / 写建立和保 持约束、 无读延时的 Avalon 总线时序, 最大限度提高总线带宽 ; 同时, 对读、 写等访问操作, 说 明 书 CN 103324589 A 9 7/8 页 10 在 IDE 环境下使用 C。
37、2H 编译器对这些性能关键的 C 语言进行硬件加速处理, 从而更加轻松 地提升了访问效率。 C2H编译器支持标准ANSI C代码, 可加速实现多种应用程序, 提高其运 行效率, 包括访问本地、 外部存储器和外设等。它利用 Quartus II SOPC Builder 工具生成 的宽带 Avalon 互联架构, 能够成功的处理外部存储器操作, 例如, 指针分散和数组访问等。 Nios II C2H 编译器分析程序要加速实现的存储器接口类型, 生成硬件加速器逻辑以及合 适的 Avalon 主机和从机接口, 达到与存储器延时的匹配。这样, 分担了 Nios II 处理器的 数据计算和存储器访问功能。
38、, 使处理器能够更好的处理其他任务。由于 Avalon 互联架构并 没有限制主机和从机的数量, 因此, Nios II C2H 编译器可以根据转换目标代码的要求, 产 生多个存储器自治硬件加速器。 0059 要用 Nios CPU 来控制 SD 卡控制器的工作, 则还要进行 SD 卡控制器设备驱动开 发, 以便在用户层中对该设备进行访问控制。本实施例按照以下五个步骤完成对 SD 卡控制 器 HAL 外设驱动的开发 : 0060 第一步, 编写 HAL 外设头文件 (sd_spi_reg.h) , 此文件描述了 SD 卡控制器硬件寄 存器的详细情况, 使应用程序或者HAL驱动总是通过它提供的接口。
39、与SD卡控制器底层硬件 打交道, 这样就为更高一层的使用带来极大方便, 在此基础上可完成开发更灵活的设备驱 动函数等操作。 0061 sd_spi_reg.h 定义了可以访问的内部寄存器, 一般由从硬件接口中抽象出来的宏 指令组成, 定义了如下访问内容 : 0062 a.支持读/写HAL外设寄存器的宏命令, 比如SD卡写操作模块中写控制寄存器定 义为 : 0063 #define IOWR_SD_SPI_WRITE_CTRL( 基地址 , 数据 ) 0064 IOWR_32DIRECT( 基地址 , 偏移量 , 数据 ) 0065 b.返回HAL外设寄存器物理地址的宏定义, 比如SD卡写操作模。
40、块中写控制寄存器 物理地址的获取方式为 : 0066 #define IOADDR_SD_SPI_WRITE_CTRL( 基地址 ) 0067 _IO_CALC_ADDRESS_NATIVE( 基地址 , 偏移量 ) 0068 c. 访问一个寄存器中单独比特域的比特掩码和偏移量, 比如 SD 卡写操作模块中 写控制寄存器的比特掩码和偏移量分别定义为 : 0069 #define SD_SPI_WRITE_CTRL_MSK(0xFFFFFFFF) 0070 #define SD_SPI_WRITE_CTRL_OFST(0x00000000) 0071 第二步, 创建 HAL 头文件 (sd_sp。
41、i_routines.h) , 此文件包含了 SD_SPI_INSTANCE 和 SD_SPI_INIT 两个宏定义。自动生成的系统初始化文件 alt_sys_init.c 将自动包含系 统中 SD 卡控制器的 HAL 头文件并调用该外设的 SD_SPI_INSTANCE 和 SD_SPI_INIT 两个宏, 从而实现该控制器的自动实例化和初始化。 0072 第三步, 创建 HAL 源文件 (sd_spi_routines.c) , 此文件也就是 SD 卡控制器的外 设驱动程序, 它基于 HAL 外设头文件 (sd_spi_reg.h) 进行开发。由于 HAL 头文件 (sd_spi_ rou。
42、tines.h) 只是声明了该 SD 卡控制器 HAL 元件中可供程序员使用的资源, 因此这些资源 的真正定义位于本 HAL 源文件中。比如对于 SD 卡的写控制函数, 可以按照以下形式实现 : 0073 说 明 书 CN 103324589 A 10 8/8 页 11 0074 第四步, 创建 SD 卡控制器的 makefile 程序, 即 component.mk 文件。component. mk会自动将外设的HAL源文件所在目录加入到make工具的源文件搜索路径, 从而保证应用 程序能够找到所有外设的驱动源码。 0075 第五步, 将以上创建的HAL驱动集成到HAL框架中, 本实施例把器。
43、件驱动集成到SD 卡控制器目录 (my_sd_spi_component) 下, 具体如下 : 0076 将 HAL 头文件放置到 my_sd_spi_component 目录的 HALinc 子文件夹下。将 HAL 源文件和component.mk文件放置到my_sd_spi_component目录的HALsrc子文件夹下。 将 HAL 外设头文件放置到 my_sd_spi_component 目录下的 inc 子文件夹中。 0077 至此, 用户便可在 Nios IDE 集成开发环境下结合驱动函数和 HAL 提供的大量 API函数进行顶层的应用程序开发。 当用户建立应用工程时, 同时系统为。
44、用户建立了HAL系 统库, 它包含了所有与底层硬件、 用户程序接口的有关信息。编译时, 与用户硬件系统相关 的 HAL 驱动程序, 被自动添加到系统库工程中, 因此程序始终与硬件系统保持同步。 0078 随后将 HAL 驱动头文件和 HAL 外设头文件集合到 IDE 环境下, 用户可从 main() 函 数开始对 SD 卡控制器进行初始化、 读、 写和擦除等操作的测试, 调用驱动函数体, 设置访问 参数, 就可以对底层 SD 卡控制器模块进行访问控制, 结合 C2H 在 IDE 环境下对特定代码进 行硬件加速, 从而实现对 SD 卡的高效访问, 实现本实施方案目标。 0079 从以上实施方式可。
45、以看出, 对 SD 卡访问所采用的 FPGA SOPC 开发方式, 包括从 底层的 SD 卡控制器硬件实现, 到最终顶层的用户程序对 SD 卡的访问控制, 实现流程囊 括设备驱动开发员和应用程序开发员的工作内容, 方法科学灵活 ; 采用封装硬件模块到 NiosCPU构成片上软核SOPC系统的方式, 结合用户程序采用最优的Avalon交换架构, 使 得在单芯片上对SD卡的访问效率非常高 ; 由于是在一个芯片上实现了控制器硬件与CPU的 融合, 使得用户在后续的应用中可以集成更多的功能, 维持和扩展了产品设计的生命周期 ; 而且从硬件设计上采取的 Avalon_MM 从端口零等待周期、 无读 / 。
46、写建立和保持约束、 无读 延时, 极大地提高了 CPU 访问效率。总的来说, 采用本实施方案基于 Nios SOPC 的 SD 卡 高效访问实现方法, 作为 SD 卡接口电子产品中一种新颖的应用方式, 在产品设计上减少了 PCB 设计的复杂程度, 减小了开发难度, 节约了设计成本, 提高了产品的生命周期。 0080 以上实施方式仅用于说明本发明, 而并非对本发明的限制, 有关技术领域的普通 技术人员, 在不脱离本发明的精神和范围的情况下, 还可以做出各种变化和变型, 因此所有 等同的技术方案也属于本发明的范畴, 本发明的专利保护范围应由权利要求限定。 说 明 书 CN 103324589 A 11 1/2 页 12 图 1 图 2a 说 明 书 附 图 CN 103324589 A 12 2/2 页 13 图 2b 说 明 书 附 图 CN 103324589 A 13 。