`
dazhilao
  • 浏览: 246404 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

.基于S3C2440 Linux2.30.4 SPI驱动移植全过程

阅读更多

原文地址:http://blog.163.com/joyrain_06/blog/static/1788253920113823524293/

一、环境

    硬件:s3c2440

    内核:Linux2.30.4

    交叉编译工具:EABI4.3.3

    开发环境:rhel5.5

二、移植

  1.修改arch/arm/mach-s3c2440/mach-mini2440.c文件:  
 

a.加入头文件

  #include <../mach-s3c2410/include/mach/spi.h>
  #include <linux/spi/spi.h>

  b.加入接口结构

/* SPI */
static struct spi_board_info s3c2410_spi0_board[] = {
        [0] = {
                .modalias = "spidev",
                .bus_num= 0,
                .chip_select= 0,
               /* s3c2410_spi0_platdata.num_cs */
                .irq = IRQ_EINT9,
                .max_speed_hz= 96*1000*1000,
        },
};

static struct s3c2410_spi_info s3c2410_spi0_platdata = {
        .pin_cs = S3C2410_GPG2,
        .num_cs = 1,
        .bus_num = 0,
        .gpio_setup=s3c24xx_spi_gpiocfg_bus0_gpe11_12_13,
};


c.加入设备

static struct platform_device *tq2440_devices[] __initdata = {
        &s3c_device_usb,
        &s3c_device_lcd,
        &s3c_device_wdt,
        &s3c_device_i2c0,
        &s3c_device_iis,
        &s3c_device_rtc,
#ifdef CONFIG_DM9000
        &s3c_device_dm9000,
#endif
        &s3c_device_usbgadget,
        &s3c_device_uda134x,

        &s3c_device_spi0,                 //注意在结构体中的位置,否则会出现编译错误
        //&s3c_device_spi1, //for spi1
};

 

d.注册设备

static void __init tq2440_machine_init(void)
{
        s3c24xx_fb_set_platdata(&tq2440_fb_info);
        s3c_i2c0_set_platdata(NULL);

        platform_add_devices(tq2440_devices, ARRAY_SIZE(tq2440_devices));
        EmbedSky_machine_init();
        /*SPI*/
        s3c_device_spi0.dev.platform_data= &s3c2410_spi0_platdata;
        spi_register_board_info(s3c2410_spi0_board, ARRAY_SIZE(s3c2410_spi0_board));
        //s3c_device_spi1.dev.platform_data= &s3c2410_spi1_platdata; //for spi1
        //spi_register_board_info(s3c2410_spi1_board, ARRAY_SIZE(s3c2410_spi1_board)); //for spi1

        s3c2410_gpio_setpin(S3C2410_GPG12, 0);
        s3c2410_gpio_cfgpin(S3C2410_GPG12, S3C2410_GPIO_OUTPUT);
        s3c24xx_udc_set_platdata(&EmbedSky_udc_cfg);
}

2.修改Kconfig

打开arch/arm/plat-s3c24XX/Kconfig
找到
////////////

config S3C24XX_SPI_BUS0_GPE11_GPE12_GPE13
bool
help
SPI GPIO configuration code for BUS0 when connected to
GPE11, GPE12 and GPE13.

config S3C24XX_SPI_BUS1_GPG5_GPG6_GPG7
bool
help
SPI GPIO configuration code for BUS 1 when connected to
GPG5, GPG6 and GPG7.

修改为
# SPI default pin configuration code

config S3C24XX_SPI_BUS0_GPE11_GPE12_GPE13
        bool "S3C24XX_SPI_BUS0_GPE11_GPE12_GPE13"
        help
          SPI GPIO configuration code for BUS0 when connected to
          GPE11, GPE12 and GPE13.

config S3C24XX_SPI_BUS1_GPG5_GPG6_GPG7
        bool "S3C24XX_SPI_BUS1_GPG5_GPG6_GPG7"
        help
          SPI GPIO configuration code for BUS 1 when connected to
          GPG5, GPG6 and GPG7.


3.编译内核

#make menuconfig


 System Type  ---> 

  [*] S3C24XX_SPI_BUS0_GPE11_GPE12_GPE13                                                                              

   [ ] S3C24XX_SPI_BUS1_GPG5_GPG6_GPG7

 

  Device Drivers  --->

                          [*] SPI support  --->  

                                                      --- SPI support                                                                                                         
                                                     *** SPI Master Controller Drivers ***                                                                         
                                                     -*-   Utilities for Bitbanging SPI masters           

                                                     <*>   GPIO-based bitbanging SPI Master      

                                                      <*>   Samsung S3C24XX series SPI                                                      

                                                      <*>   Samsung S3C24XX series SPI by GPIO                                           
                                                     *** SPI Protocol Masters ***   

                                                     <*>   User mode SPI device driver support 

                                                     < >   Infineon TLE62X0 (for power switching)  

保存

#make zImage

4.测试

../Documentation/spi

arm-linux-gcc -I/root/linux-2.6.30.4/include spidev_test.c

 

 后会生成a.out的spi测试程序;
拷入文件系统运行可看到结果(将MISO和MOSI短接)

5.结果

./a.out
spi mode: 0
bits per word: 8
max speed: 96000000 Hz (96000 KHz)

FF FF FF FF FF FF
40 00 00 00 00 95
FF FF FF FF FF FF
FF FF FF FF FF FF
FF FF FF FF FF FF
DE AD BE EF BA AD
F0 0D

测试结果正确。

用示波器查看波形t=20ns*2 并且数据波形正确

参考:http://www.arm9home.net/read.php?tid-4422.html

           http://www.arm9home.net/read.php?tid-2378-keyword-spi.html
           http://www.arm9home.net/read.php?tid-3620-keyword-spi.html

 

分享到:
评论

相关推荐

    s3c2440驱动设计和应用程序综合设计

    1.基于s3c2440的led驱动设计、驱动...4.基于s3c2440的中断poll驱动设计、驱动调用应用程序设计; 5.基于s3c2440的异步中断驱动设计、驱动调用应用程序设计; 6.基于s3c2440的中断阻塞驱动设计、驱动调用应用程序设计;

    spi.rar_linux 2440 s_s3c2440 spi_s3c2440 spi

    在描述中提到的"spi.rar_linux 2440 s_s3c2440 spi_s3c2440 spi",我们可以推断这是针对Linux 2.6.12内核,专门针对S3C2440平台优化的SPI驱动程序的压缩包。"spi.c"是这个压缩包中的主要源代码文件,它包含了实现SPI...

    s3c2440芯片中文手册

    s3c2440a_5MemoryController(储存器控制器).pdf s3c2440a_6NandFlash.pdf s3c2440a_7clock&power;(时钟电源).pdf s3c2440a_8DMA.pdf s3c2440a_10PWM&Timer;...s3c2440a_22SPI.pdf s3c2440a_24AC97.pdf

    基于S3C2440的嵌入式Linux开发实例pdf书籍

    3. **Linux内核移植**:书中的实例将指导读者如何将Linux内核移植到S3C2440硬件平台,包括配置内核、编译和烧录过程,以及调试过程中可能遇到的问题和解决方案。 4. **根文件系统构建**:根文件系统是嵌入式Linux...

    s3c2440中文手册(全)

    s3c2440中文手册(全) 包括:s3c2440a_5MemoryController.pdf s3c2440a_6NandFlash.pdf s3c2440a_7clock&power.pdf s3c2440a_8DMA.pdf s3c2440a_10PWM&Timer.pdf s3c2440a_11UART.pdf s3c2440a_14INTCtrl.pdf s3c...

    s3c2440基于VxWork的SPI驱动

    总结来说,"s3c2440基于VxWork的SPI驱动"涉及到的关键知识点包括:S3C2440处理器的SPI控制器特性,VxWorks的设备驱动模型,SPI通信协议,以及驱动程序的开发流程,包括初始化、数据传输和用户接口。通过理解并实现...

    基于S3C2440的嵌入式Linux内核移植及字符设备驱动开发.pdf

    "基于S3C2440的嵌入式Linux内核移植及字符设备驱动开发" 本文主要介绍了基于S3C2440的嵌入式Linux内核移植及字符设备驱动开发的过程。文章首先介绍了嵌入式平台的多样性,以及在一个特定的嵌入式系统应用中,需要...

    基于S3C2440嵌入式Linux的伺服电机控制.pdf

    基于S3C2440嵌入式Linux的伺服电机控制 本文主要介绍了一种基于S3C2440微处理器的伺服电机控制方案。该方案使用Linux操作系统,通过编写驱动程序和应用程序来控制伺服电机的转动方向和速度,并通过LED指示灯和蜂鸣...

    spi.rar_2440 spi_s3c2440_spi_spi flash s3c2440_spi for s3c2440

    在这个名为"spi.rar_2440 spi_s3c2440_spi_spi flash s3c2440_spi for s3c2440"的压缩包中,我们关注的是S3C2440处理器的SPI驱动程序,该驱动程序用于在Linux操作系统环境下操作SPI接口。 S3C2440是三星公司生产的...

    s3c2440_sd.rar_2440 linux_LINUX S3C SD_s3c2440_sd for s3c2440_sd

    标题中的“s3c2440_sd.rar_2440 linux_LINUX S3C SD_s3c2440_sd for s3c2440_sd”表明这是一个与S3C2440微处理器相关的Linux系统下SD卡驱动程序的压缩文件。S3C2440是一款由Samsung公司设计的基于ARM920T内核的微...

    基于S3C2440的嵌入式Linux开发实例

    基于S3C2440的嵌入式Linux开发实例

    基于S3C2440的程序.rar

    基于S3C2440的Demo程序.rar 基于S3C2440的LED程序.rar 基于S3C2440的Memory程序.rar 基于S3C2440的NandFlash程序.rar 基于S3C2440的Run in NandFlash程序.rar 基于S3C2440的USB程序.rar

    基于S3C2440的Linux内核移植和yaffs2文件系统制作

    基于S3C2440的Linux内核移植和yaffs2文件系统制作涉及到的是在嵌入式设备上运行Linux操作系统的关键步骤。S3C2440是一款由Samsung制造的ARM9微处理器,常用于嵌入式系统设计。在这样的硬件平台上移植Linux内核意味着...

    spi.rar_S3C2440 ADC SPI_s3c2440 spi_s3c2440 s_s3c2440 spi_s3c24

    5. **编程实现**:在S3C2440上,需要通过编写C语言程序来设置SPI接口,初始化74HC595,并发送要显示的字符代码。这通常包括配置GPIO端口作为SPI接口,设置SPI工作模式,以及使用适当的延时函数确保正确的时序。 6. ...

    S3C2440_install_linux.rar_S3C2440 LINUX__install_linux_s3c2440

    《S3C2440上安装Linux操作系统详解》 S3C2440是一款由Samsung公司推出的基于ARM920T内核的微处理器,广泛应用在嵌入式系统中,如移动设备、数字媒体播放器、工业控制等领域。在这款处理器上安装Linux操作系统,不仅...

    基于s3c2440的SPI驱动OLED

    在嵌入式系统开发中,基于S3C2440的SPI驱动OLED是一个常见的需求,用于在小型显示屏上显示字符和图形。S3C2440是一款由Samsung公司设计的ARM9处理器,广泛应用于各种嵌入式设备。而SPI(Serial Peripheral Interface...

    Keil-uVision4-S3C2440.rar_S3C2440 KEIL_keil s3c2440_keil开发s3c244

    S3C2440是基于ARM920T内核的32位微处理器,具有高速处理能力,内置MMU,支持Linux等操作系统。它集成了多种外围设备,如GPIO、UART、I2C、SPI、USB、LCD控制器等,适合构建各种复杂的嵌入式系统。 3. 裸机开发概念...

    本科毕业论文-—基于s3c2440的linux操作系统移植.doc

    移植过程中需要对 Linux 内核进行修改,并且需要编写驱动程序来控制 S3C2440 处理器的硬件资源。 本资源摘要信息主要是基于 S3C2440 的 Linux 操作系统移植,论文主要介绍了 Linux 操作系统的发展概述、优点、应用...

    基于s3c2440的DHT11温湿度采集驱动

    本文将深入探讨如何在基于S3C2440的Mini2440开发板上实现DHT11温湿度传感器的驱动程序开发,以便有效地获取和处理环境中的温湿度数据。 DHT11是一款低成本、易于使用的数字温湿度传感器,它集成了温度和湿度传感器...

Global site tag (gtag.js) - Google Analytics