usb转spi linux,linux SPI驱动分析(转)

2.6.18内核下已经添加了完整的spi子系统了,参考mtd的分析,将从下到上层,再从上到下层的对其进行分析。

以下先从下到上的进行分析:

driver/spi下有两个底层相关的spi驱动程序:

spi_s3c24xx.c和spi_s3c24xx_gpio.c

其中spi_s3c24xx.c是基于s3c24xx下相应的spi接口的驱动程序,spi_s3c24xx_gpio.c允许用户指定3个gpio口,分别充当spi_clk、spi_mosi和spi_miso接口,模拟标准的spi总线。

s3c2410自带了两个spi接口(spi0和spi1),在此我只研究基于s3c2410下spi接口的驱动程序spi_s3c24xx.c。

首先从spi驱动的检测函数进行分析:

static int s3c24xx_spi_probe(struct platform_device *pdev)

{

struct s3c24xx_spi *hw;

struct spi_master *master;

struct spi_board_info *bi;

struct resource *res;

int err = 0;

int i;

/* pi_alloc_master函数申请了struct spi_master+struct s3c24xx_spi大小的数据,* spi_master_get_devdata和pi_master_get分别取出struct s3c24xx_spi和struct spi_master结构指针*/

master = spi_alloc_master(&pdev->dev, sizeof(struct s3c24xx_spi));

if (master == NULL) {

dev_err(&pdev->dev, "No memory for spi_master\n");

err = -ENOMEM;

goto err_nomem;

}

/* 填充struct spi_master结构 */

hw = spi_master_get_devdata(master);

memset(hw, 0, sizeof(struct s3c24xx_spi));

hw->master = spi_master_get(master);

hw->pdata = pdev->dev.platform_data;

hw->dev = &pdev->dev;

if (hw->pdata == NULL) {

dev_err(&pdev->dev, "No platform data supplied\n");

err = -ENOENT;

goto err_no_pdata;

}

platform_set_drvdata(pdev, hw);//dev_set_drvdata(&pdev->dev, hw)

init_completion(&hw->done);

/* setup the state for the bitbang driver */

/* 填充hw->bitbang结构(hw->bitbang结构充当一个中间层,相当与input system的input_handle struct) */

hw->bitbang.master         = hw->master;

hw->bitbang.setup_transfer = s3c24xx_spi_setupxfer;

hw->bitbang.chipselect     = s3c24xx_spi_chipsel;

hw->bitbang.txrx_bufs      = s3c24xx_spi_txrx;

hw->bitbang.master->setup  = s3c24xx_spi_setup;

dev_dbg(hw->dev, "bitbang at %p\n", &hw->bitbang);

/* find and map our resources */

/* 申请spi所用到的资源:io、irq、时钟等 */

res = platform_get_resource(pdev, IORESOURCE_MEM, 0);

if (res == NULL) {

dev_err(&pdev->dev, "Cannot get IORESOURCE_MEM\n");

err = -ENOENT;

goto err_no_iores;

}

hw->ioarea = request_mem_region(res->start, (res->end - res->start)+1,

pdev->name);

if (hw->ioarea == NULL) {

dev_err(&pdev->dev, "Cannot reserve region\n");

err = -ENXIO;

goto err_no_iores;

}

hw->regs = ioremap(res->start, (res->end - res->start)+1);

if (hw->regs == NULL) {

dev_err(&pdev->dev, "Cannot map IO\n");

err = -ENXIO;

goto err_no_iomap;

}

hw->irq = platform_get_irq(pdev, 0);

if (hw->irq < 0) {

dev_err(&pdev->dev, "No IRQ specified\n");

err = -ENOENT;

goto err_no_irq;

}

err = request_irq(hw->irq, s3c24xx_spi_irq, 0, pdev->name, hw);

if (err) {

dev_err(&pdev->dev, "Cannot claim IRQ\n");

goto err_no_irq;

}

hw->clk = clk_get(&pdev->dev, "spi");

if (IS_ERR(hw->clk)) {

dev_err(&pdev->dev, "No clock for device\n");

err = PTR_ERR(hw->clk);

goto err_no_clk;

}

/* for the moment, permanently enable the clock */

clk_enable(hw->clk);

/* program defaults into the registers */

/* 初始化spi相关的寄存器 */

writeb(0xff, hw->regs + S3C2410_SPPRE);

writeb(SPPIN_DEFAULT, hw->regs + S3C2410_SPPIN);

writeb(SPCON_DEFAULT, hw->regs + S3C2410_SPCON);

/* add by lfc */

s3c2410_gpio_setpin(S3C2410_GPE13, 0);

s3c2410_gpio_setpin(S3C2410_GPE12, 0);

s3c2410_gpio_cfgpin(S3C2410_GPE13, S3C2410_GPE13_SPICLK0);

s3c2410_gpio_cfgpin(S3C2410_GPE12, S3C2410_GPE12_SPIMOSI0);

s3c2410_gpio_

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: FT4232HL是一款功能强大的USB串口芯片,它可以实现多路串行通信,也可以实现JTAG和SPI等其他方式的通信。为了让FT4232HL能够正常工作,需要安装相应的驱动程序。 FT4232HL驱动程序包含了两部分:USB驱动和串口驱动USB驱动通过USB接口与计算机通信,串口驱动将数据解析后发送到串口端口。 安装FT4232HL驱动需要先下载正确的驱动程序和FTDI D2XX驱动,在安装程序中选择对应驱动即可。安装完成后,FT4232HL会被自动检测并安装在计算机中。如果需要使用串口通信,还需要在设备管理器中查找已安装的FT4232HL串口,然后选择对应的串口进行使用。 总的来说,FT4232HL驱动程序极为重要,因为它直接决定了FT4232HL芯片的正常工作。安装正确的驱动程序可以保证芯片的稳定运行,避免一些通信错误和不必要的问题。 ### 回答2: FT4232HL是一款高速USB串口和并口芯片。它支持4路串口和1路并口模式,数据传输速率可达到12Mbps。为了实现对FT4232HL的完整控制和数据交互,需要安装相应的驱动程序。 FT4232HL驱动是一款软件程序,可将计算机的USB接口换为串口接口。在使用这款芯片时,需要根据操作系统的不同,安装相应的驱动程序。通常情况下,Windows系统中自带了FT4232HL的驱动程序,而各种Linux系统需要手动安装FTDI驱动程序来支持FT4232HL芯片。 安装驱动程序是使用FT4232HL芯片的第一步,如果安装驱动程序失败,将无法使用FT4232HL芯片的功能。因此,在安装驱动程序前,一定要确保计算机操作系统和芯片规格的匹配。 总之,FT4232HL芯片具有高速USB串口和并口的能力,但需要安装相应的驱动程序才能正常工作。对于需要使用该芯片的用户,一定要按照官方的说明来进行操作,并注意安装相应的驱动程序。 ### 回答3: FT4232HL是一种高速USB串口芯片,常用于工业自动化、医疗设备、航空航天、科学研究等领域。为了实现与计算机进行通信,需要安装相应的驱动程序。 驱动程序的安装步骤如下: 1. 连接FT4232HL芯片和计算机,并确保其处于正常工作状态。 2. 下载并安装最新版的FTDI驱动程序,可以从FTDI公司官网上下载。 3. 安装驱动程序前,需要先将FT4232HL芯片的设备描述符添加到Windows设备管理器中,以确保计算机能够识别它。 4. 安装驱动程序时,需要选择对应的操作系统版本和平台架构。 5. 安装完成后,重新启动计算机并连接FT4232HL芯片,即可开始使用串口通信功能。 需要注意的是,如果出现驱动程序无法安装或无法识别FT4232HL芯片的情况,可能需要检查USB连接是否正常或更换USB接口。同时,也需要注意保持驱动程序和FT4232HL芯片的同步更新,以避免出现严重的兼容性问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值