|
本帖最后由 kevin_me 于 2013-4-21 23:23 编辑
刚刚接触linux,需要通过SPI接口扩展一个以太网口出来,选的ENC424J600网卡芯片。
准备工作期间,看了套接字编程、LDD3及相关书籍,看的过程中很是痛苦,很多概念都没有,理解起来更是困难,不过反复看之后还是有点认识。最近开始动手了,网上整合了一个该芯片的驱动程序,menuconfig将该芯片下的网卡作为buit in配置进去了,然后在ARM芯片的C文件中,注册了相关IO资源。
折腾一番编译通过,发现ENC424J600倒是能在系统内核初始化的过程中被执行,可是搞了几天,连enc的probe初始化函数都跑不过去,返回信息是“enc424j600 chip not found,probe of spi1.0 faild with error -5”
发现是enc424j600_hw_init(priv);这个函数没跑对,并且返回了-1。
我用的CPU是AT91SAM9M10G45,基于该芯片的官方开发板做的一个板子。
这个CPU有2路SPI接口,原来的开发板使用SPI0去做了个dataflash,我另外使用的SPI1做的网卡扩展。
因此在board-sam9m10g45ek.c中,对于SPI设备,我新增了一个结构体来描述网卡。
/*
* SPI devices.
*/
static struct spi_board_info ek_spi_devices[] = {
{
// DataFlash chip 这是开发板本身使用的
.modalias = "mtd_dataflash",
.chip_select = 0,
.max_speed_hz = 15 * 1000 * 1000,
.bus_num = 0,
},
{
// enc424j600 chip 这是我自己扩展的
.modalias = "enc424j600",
.chip_select = 0,
.max_speed_hz = 10 * 1000 * 1000,
.bus_num = 1,
.mode = 0,
.irq = AT91_PIN_PD18,
},
};
而且我板子的走线,也是按照CPU的SPI1那4根线走的,也不需要我另外写代码分配,在at91sam9g45_devices.c里面有相关 字段描述:
在函数void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)中
以下是初始化CS线
/* Choose SPI chip-selects */
for (i = 0; i < nr_devices; i++) {
if (devices.controller_data)
cs_pin = (unsigned long) devices.controller_data;
else if (devices.bus_num == 0)
cs_pin = spi0_standard_cs[devices.chip_select];
else
cs_pin = spi1_standard_cs[devices.chip_select];
if (devices.bus_num == 0)
enable_spi0 = 1;
else
enable_spi1 = 1;
以下是初始化通讯接口
if (enable_spi1) {
at91_set_A_periph(AT91_PIN_PB14, 0); /* SPI1_MISO */
at91_set_A_periph(AT91_PIN_PB15, 0); /* SPI1_MOSI */
at91_set_A_periph(AT91_PIN_PB16, 0); /* SPI1_SPCK */
最后在board-sam9m10g45ek.c中,static void __init ek_board_init(void)会把各类硬件资源添加到内核
包括SPI:
/* SPI */
at91_add_device_spi(ek_spi_devices, ARRAY_SIZE(ek_spi_devices));
最近几天的成果就是这些了,也不知道需不需要再另外单独设置CS口为输出方向,然后用SPI操作ENC芯片的时候,需要将CS线拉低,用完之后再拉高,但是我追踪代码,并未看见这样的操作,或许是linux的封装太精巧了,我实在是看不到那些底层的操作,搞单片机习惯了,总想看程序怎么走的。
然后ENC的中断引脚连至CPU的PD18,因此在上面我写了.irq = AT91_PIN_PD18,也不知道还需不需要有额外的声明什么的
Linux水太深了,我已经快淹死了。
请教谁搞过硬件驱动开发或移植的,指点一下,非常感谢。
驱动程序移植来源,猛击我
这老外这对这个芯片写了几版程序,我用的是最新的,应该不会有什么严重问题,而我现在需要做的,仅仅是将它注册到内核中去。 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|