fl2440添加SD卡驱动

本文介绍如何在Linux环境下为FL2440开发板配置SD卡驱动,包括选择配置项、修改内核源码等步骤,并展示了如何设置SD卡插入检测中断。

fl2440添加SD卡驱动

linux中对s3c2440的驱动已经完善得比较好,如果需要使用相关驱动,我们只需要在make menuconfig中选上相应的配置选项,并且稍稍修改内核源码就可以使用相关驱动。SD卡的驱动也不例外

make menuconfig 选项
   Device Drivers  ---> 
        <*> MMC/SD/SDIO card support  --->  
                     <*>   MMC block device driver 
                     [*]     Use bounce buffer for simple hosts 
                     <*>   SDIO UART/GPS class support   
                     <*>   Secure Digital Host Controller Interface support 
                     <*>   MMC/SD/SDIO over SPI  
                     <*>   Samsung S3C SD/MMC Card Interface support  

修改内核源码

mach-smdk2440.c

在 kernel/arch/arm/mach-s3c2440/mach-smdk2440.c文件中添加SD卡平台设备,如下所示:
static struct platform_device *smdk2440_devices[] __initdata = {
&s3c_device_ohci,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c0,
&s3c_device_iis,
&s3c_device_dm9000,
/* 添加下SD卡 的设备成员 */
&s3c_device_sdi,/* suport SD card device,Add by liwannneg 2017-4-16 12:38:35 */
};

s3cmci.c

在./drivers/mmc/host/s3cmci.c文件中修改s3cmci_probe函数,设置检测SD卡插入的中断号,及配置响应的引脚为中断功能。如下所示:
static int __devinit s3cmci_probe(struct platform_device *pdev)
{

// host->irq_cd = gpio_to_irq(host->pdata->gpio_detect);
host->irq_cd = IRQ_EINT18;//sd卡中断号为18
s3c2410_gpio_cfgpin(S3C2410_GPG(10),S3C2410_GPG10_EINT18);


}

根据FL2440的原理图,我们将SD卡插入的中断号设置为18,其原理图如下所示:
这里写图片描述
NCD PIN脚是用于检测SD卡插入的引脚,由图可以看出 NCD接的是 EINT18 号外部中断。

重新编译内核

完成以上修改之后,重新编译内核并烧录到开发板,在关机状态下插入SD卡之后开机。

这里写图片描述
可以在dev目录下看到sd卡的设备文件
这里写图片描述
现在列查看sd卡里面的内容
这里写图片描述

<think>好的,用户的问题是如何在FPGA的JTAG模式下从SD卡中读取信息。首先,我需要理解用户的具体需求。他们可能在使用FPGA开发板,希望通过JTAG接口从SD卡读取数据,但不确定具体的实现步骤和配置方法。 首先,我应该回顾JTAG的基本功能。根据引用[^1],JTAG主要用于边界扫描测试、电路仿真和闪存编程。它是一种串行协议,可以将多个设备的I/O引脚连接成一个大的移位寄存器。但用户想用JTAG来读取SD卡的数据,这可能需要结合其他模块或设计。 接下来,考虑SD卡的接口。SD卡通常通过SPI或SDIO接口与FPGA通信,而JTAG本身并不是用于数据传输的接口,更多用于调试和配置。因此,用户可能需要通过JTAG来访问FPGA内部的逻辑,这些逻辑负责控制SD卡的读写。 然后,想到用户可能需要一个软核处理器,比如MicroBlaze,来处理SD卡的读写操作,并通过JTAG与外部通信。引用[^2]提到在烧写FLASH时需要FSBL文件,并且可以强制设置启动模式为JTAG_MODE,这可能与配置相关。可能需要在FPGA设计中集成SD卡控制器,并通过JTAG进行调试或数据传输。 用户可能遇到的挑战包括如何将JTAG指令转换为SD卡操作,如何在FPGA内部实现数据通路,以及如何配置相关寄存器。需要分步骤说明设计流程,包括硬件设计、软件开发和调试步骤。 还需要考虑是否需要使用特定的工具,如Vivado和SDK,来生成FSBL和应用程序。引用[^3]提到擦除EMMC的IDB或修改uboot配置,这可能与启动顺序有关,但用户的问题更偏向于JTAG模式下的数据读取,可能需要结合SD卡的文件系统访问。 最后,确保回答结构清晰,分步骤说明实现方法,并提醒可能遇到的问题,如时钟同步、信号完整性和调试工具的使用。同时,生成相关问题帮助用户深入理解。</think>### FPGA在JTAG模式下读取SD卡的实现与配置 在FPGA开发中,通过JTAG接口读取SD卡数据需要结合硬件设计、固件开发及调试工具链的协同工作。以下是具体实现步骤: --- #### **1. 硬件架构设计** - **SD卡接口模块**:需在FPGA中实现SDIO或SPI控制器,例如: ```verilog module sd_controller( input wire clk, inout wire [3:0] sd_dat, output wire sd_cmd, input wire sd_clk ); // SD卡通信协议状态机实现 endmodule ``` - **JTAG-to-AXI桥接**:通过JTAG接口访问FPGA内部总线(如AXI),例如使用Xilinx的BSCAN模块。 - **数据缓冲区**:在FPGA内部实现双端口RAM,用于暂存SD卡数据。 --- #### **2. 固件开发流程** - **FSBL配置**:强制设置启动模式为JTAG(参考引用): ```c BootModeRegister = JTAG_MODE; // 跳过启动模式检测 ``` - **SD卡驱动集成**:在嵌入式软件(如FreeRTOS或裸机程序)中实现以下功能: ```c void sd_read_block(uint32_t addr, uint8_t *buffer) { // SD卡块读取协议实现 } ``` - **JTAG指令解析**:定义自定义JTAG指令(如USER4)用于触发SD卡操作: ```tcl # Vivado Tcl脚本示例 create_hw_cfgmem -hw_device [lindex [get_hw_devices] 0] -mem_dev [lindex [get_cfgmem_parts {s25fl128s-spi-x1_x2_x4}] 0] ``` --- #### **3. 调试与数据交互** - **Vivado硬件管理器**:通过JTAG读取FPGA内部寄存器状态: ```tcl read_hw_reg [get_hw_regs data_buffer_0] ``` - **ChipScope/ILA集成**:捕获SD卡接口信号时序: ```verilog ila_0 sd_debug_ila ( .clk(sd_clk), .probe0(sd_cmd), .probe1(sd_dat) ); ``` - **Python自动化脚本**:通过PyJTAG库实现批量数据传输: ```python from jtag import JTAG j = JTAG() j.write_ir(0x0A) # 发送SD读指令 data = j.read_dr(512) # 读取512字节块 ``` --- #### **关键问题与解决方案** 1. **时钟域同步**:SD卡时钟(通常≤50MHz)需通过FPGA的MMCM模块生成,并与JTAG时钟域隔离。 2. **信号完整性**:SD卡接口需添加上拉电阻(如10kΩ)并控制走线长度差异(<5mm)。 3. **文件系统支持**:可通过集成FatFS库实现FAT32文件解析(引用[^3]提到的文件系统操作)。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值