查看: 14302|回复: 7

[求助] 求指导:飞思卡尔i.MX6 + android spi总线驱动移植

[复制链接]

该用户从未签到

1

主题

5

帖子

0

新手上路

Rank: 1

积分
9
最后登录
1970-1-1
发表于 2013-9-9 10:47:09 | 显示全部楼层 |阅读模式
 各位好,在下在用mx6q_sabresd 板进行开发(i.MX6 + android),使用中需要用到ecspi3,这个用到是指我的另外的驱动(打印机的),需要用到spi发送数据;
然后这个ecspi3在原来代码中并没有支持,需要去添加,我参考ecspi1的做了以下修改,但是进行测试时用示波器量ecspi3的clk和IO,发现并没有看到任何信号,求各位指导,看看小弟的修改是否已经完整,谢谢!
我做的修改如下:(我需要用到的是ecspi3)
1、板级文件的修改:board-mx6q_sabresd.c和board-mx6q_sabresd.h
board-mx6q_sabresd.c中的:
mx6_sabresd_board_init(void)函数中,增加代码:
imx6q_add_ecspi(2, &mx6q_sabresd_printer_spi_data);
spi_device_init();


以上两个函数的涉及到的具体定义:
#define SABRESD_ECSPI3_CS0        IMX_GPIO_NR(4, 24)
static int mx6q_sabresd_printer_spi_cs[] = {
        SABRESD_ECSPI3_CS0,
};
static const struct spi_imx_master mx6q_sabresd_printer_spi_data __initconst = {
        .chipselect     = mx6q_sabresd_printer_spi_cs,
        .num_chipselect = ARRAY_SIZE(mx6q_sabresd_printer_spi_cs),
};       


static void spi_device_init(void)
{
#if 0
        spi_register_board_info(imx6_sabresd_spi_nor_device,
                                ARRAY_SIZE(imx6_sabresd_spi_nor_device));
#else
        spi_register_board_info(imx6_sabresd_spi_m000_device,
                                ARRAY_SIZE(imx6_sabresd_spi_m000_device));
#endif 
}


static struct spi_board_info imx6_sabresd_spi_m000_device[] __initdata = {
#if defined(CONFIG_MTD_M25P80)
        {
                .modalias = "m25p80",
                .max_speed_hz = 20000000, /* max spi clock (SCK) speed in HZ */
                .bus_num = 0,
                .chip_select = 0,
                .platform_data = &imx6_sabresd__spi_flash_data,
        },
#endif
        {
                .modalias = "printer_spi",
                .max_speed_hz = 8000000,        
                .bus_num = 2, 
                .chip_select = 0,
                .mode = SPI_MODE_0,                               
        },       
};


board-mx6q_sabresd.h中,mx6q_sabresd_pads中增加:
MX6Q_PAD_DISP0_DAT0__ECSPI3_SCLK,                        /* DISP0_DAT0  CSPI3_CLK                 */
        MX6Q_PAD_DISP0_DAT1__ECSPI3_MOSI,                        /* DISP0_DAT1  CSPI3_MOSI                */
        MX6Q_PAD_DISP0_DAT2__ECSPI3_MISO,                        /* DISP0_DAT2  CSPI3_MISO                */
        MX6Q_PAD_DISP0_DAT3__GPIO_4_24,                                /* DISP0_DAT3  CSPI3_CS0                */


在以上的这些增加后,在系统启动时,启动信息中有提示:
spi_imx imx6q-ecspi.2: probed
在sys/bus/platform/devices中,有:
imx6q-ecspi.2


2、接着我自己新建了一个文件,里面对“printe_spi”进行注册等操作
static int __init mx6_printer_probe(struct spi_device *spi)
{
        spi->bits_per_word = 8;               
        spi->max_speed_hz=8000000;
        spi->mode = SPI_MODE_0,
        printer_spi = spi;


        spi_setup(spi);
        return 0;
}


/*
 * This structure contains pointers to the M4000 Printer callback functions.
 */
static struct spi_driver mx6_printer_driver = {
        .driver = {
                   .name = "printer_spi",
                   .bus = &spi_bus_type,
                   .owner = THIS_MODULE,
                   },
        .probe = mx6_printer_probe,
};




static int __init mx6_printer_init(void)
{
        pr_info("Registering the Printer Driver \n");
        return spi_register_driver(&mx6_printer_driver);
}
device_initcall(mx6_printer_init);


修改到这里,我觉得我需要修改的关于ecspi3的都全部完成了;然后我去用自己写的测试函数进行测试:cpu通过ecspi3发送数据
用示波器去测量,发现clk和IO都没有输出;


请教:1、上面我所描述的两步骤的修改,是否已经完成对移植ecspi3所需的全部修改了呢?若没有,还有哪些需要修改的呢?
2、目前对于这个没有头绪,希望各位能指导指导;
另外,需要去测试这个ecspi3是否全部修改完整,还有什么更好的方法可以进行测试嘛?


谢谢!
 
我知道答案 目前已有6人回答
回复

使用道具 举报

该用户从未签到

1

主题

5

帖子

0

新手上路

Rank: 1

积分
9
最后登录
1970-1-1
 楼主| 发表于 2013-9-9 11:20:28 | 显示全部楼层

RE:求指导:飞思卡尔i.MX6 + android spi总线驱动移植

有做过spi这方面移植的朋友,帮忙提提看法吧!
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

28

帖子

0

新手上路

Rank: 1

积分
28
最后登录
1970-1-1
发表于 2013-9-9 16:57:22 | 显示全部楼层

RE:求指导:飞思卡尔i.MX6 + android spi总线驱动移植

你的修改看上去沒什么问题, 試一下 .modalias = "spidev", 再測一下 /dev/spidevx.y
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

5

帖子

0

新手上路

Rank: 1

积分
9
最后登录
1970-1-1
 楼主| 发表于 2013-9-9 17:12:47 | 显示全部楼层

回复:求指导:飞思卡尔i.MX6 + android spi总线驱动移植

回复第 3 楼 于2013-09-09 16:57:22发表:
你的修改看上去沒什么问题, 試一下 .modalias = "spidev", 再測一下 /dev/spidevx.y
 
谢谢3楼的回复,你提的这个,我有试过了,在dev下能生成spidev2.0节点,然后我用飞思卡尔提供的测试spi的demo程序去进行测试,运行情况如下:
root@android:/ # ./mxc_spi_test1 -D 2 -s 4000000 -b 8 abcdefg                  
Execute data transfer test: 2 7 abcdefg
spi mode: 0
bits per word: 8
max speed: 4000000 Hz (4000 KHz)
Data sent : abcdefg
Data received : abcdefg
Test PASSED.
 
单看这个信息,应该是说程序跑得正常,但是,我把clk和IO接到示波器,发现仍是没有任何的输出。
另外,我也尝试过把ecspi1的也改成.modalias = "spidev", 去试,也能生成在dev下能生成spidev2.0节点,但是测试时,同样是示波器检测不到任何的输出。
 
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

5

帖子

0

新手上路

Rank: 1

积分
9
最后登录
1970-1-1
 楼主| 发表于 2013-9-9 17:16:01 | 显示全部楼层

RE:求指导:飞思卡尔i.MX6 + android spi总线驱动移植

斑竹也帮忙提提看法吧!
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

28

帖子

0

新手上路

Rank: 1

积分
28
最后登录
1970-1-1
发表于 2013-9-10 11:25:57 | 显示全部楼层

RE:求指导:飞思卡尔i.MX6 + android spi总线驱动移植

看測試結果, SPI应該沒有問題. 你試一下不停执行mxc_spi_test1, 換一台示波器看看.
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

5

帖子

0

新手上路

Rank: 1

积分
9
最后登录
1970-1-1
 楼主| 发表于 2013-9-10 20:12:39 | 显示全部楼层

回复:求指导:飞思卡尔i.MX6 + android spi总线驱动移植

回复第 6 楼 于2013-09-10 11:25:57发表:
看測試結果, SPI应該沒有問題. 你試一下不停执行mxc_spi_test1, 換一台示波器看看.
 
谢谢6楼的回复;
对于测试打印出来的结果,我是有疑惑的:我还没有短接mosi和miso,它就返回测试成功了!
这个也太神奇了;
 
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

37

帖子

0

注册会员

Rank: 2

积分
77
最后登录
1970-1-1
发表于 2014-5-15 17:32:20 | 显示全部楼层

RE:求指导:飞思卡尔i.MX6 + android spi总线驱动移植

您好楼主,我看您的程序是C语言编写的,我想问一下您是在什么环境写编写程序的?又是怎么把程序下载到开发板里运行的?很需要您的解答,谢谢!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-20 16:09 , Processed in 0.103239 second(s), 28 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表