在线时间0 小时
UID291311
注册时间2008-9-8
NXP金币0
该用户从未签到
新手上路

- 积分
- 9
- 最后登录
- 1970-1-1
|
各位好,在下在用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是否全部修改完整,还有什么更好的方法可以进行测试嘛?
谢谢!
|
|