|
Драйвер АЦП, для ARM9 |
|
|
|
Jan 12 2012, 18:42
|
Знающий
   
Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195

|
Хочу прикрутить драйвер АЦП AD7606 к Linux на AT91SAM9260. На сайте AD нашёл драйвер, интсрукцию по применению =ad7606]http://wiki.analog.com/resources/tools-software/linux-drivers/iio-adc/ad7606?s[]=ad7606 вопросы: 1) нужно использовать файлы *.c и *.h (файлы драйвера по ссылке выше) как подключаемый модуль ядра (как по книге "Linux Device Driver")? 2) По ссылке выше сказано, что нужно добавить в конфигурацию ядра "Industrial I/O support", но у меня в меню конфигурации такой графы просто нет У меня ядро 2.6.24. Старое для таких целей? или что-то нужно добавить предварительно? 3) встречаю пример применения драйвера: CODE static struct ad7606_platform_data ad7606_pdata = { .default_os = 0, .default_range = 10000, .gpio_convst = GPIO_PF9, .gpio_reset = GPIO_PF10, .gpio_range = GPIO_PH0, .gpio_os0 = GPIO_PH1, .gpio_os1 = GPIO_PH2, .gpio_os2 = GPIO_PH3, .gpio_frstdata = -1, .gpio_stby = GPIO_PF12, }; правильно ли я понимаю что дефайны ног процессора (вроде GPIO_PF9) нужно искать в библиотеке компилятора (arm-none-eabi в моём случае) как для обычного ногодрыга.
Сообщение отредактировал TigerSHARC - Jan 12 2012, 18:43
|
|
|
|
|
 |
Ответов
|
May 22 2012, 18:22
|
Знающий
   
Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195

|
Не могу добится появления устройства в системе, как тут: root:/> cd /sys/bus/iio/devices/ root:/sys/bus/iio/devices> ls device0 device0:buffer0:access0 trigger0 device0:buffer0 device0:buffer0:event0 и тут: root:/sys/devices/platform/ad7606-8.0/device0> Хотя добавил устройства в makeconfig, добавил инициализацию АЦП, в массив ek_spi_devices[]: CODE static struct spi_board_info board_spi_board_info[] __initdata = { #if defined(CONFIG_AD7606) || \ defined(CONFIG_AD7606_MODULE) { /* the modalias must be the same as spi device driver name */ .modalias = "ad7606-8", /* Name of spi_driver for this device */ .max_speed_hz = 10000000, /* max spi clock (SCK) speed in HZ */ .bus_num = 0, /* Framework bus number */ .chip_select = 3, /* Framework chip select */ .platform_data = &ad7606_pdata, .irq = gpio_to_irq(AT91_PIN_PA22), .mode = SPI_MODE_3, }, #endif };
сама структура АЦП тоже описана в файле борды CODE static struct ad7606_platform_data ad7606_pdata = { .default_os = 0, .default_range = 10000, .gpio_convst = AT91_PIN_PA27, .gpio_reset = AT91_PIN_PA28, .gpio_range = AT91_PIN_PA29, .gpio_frstdata = -1, .gpio_stby = -1, }; В качестве тактового генератора используется hrtimer. В файле борды есть : CODE static const char *hrtimer_trigger_pdata[] = { "0", /* 0 is the name of the trigger */ NULL, }; static struct platform_device hrtimer_trigger = { .name = "iio_hrtimer_trigger", .device = { .platform_data = &hrtimer_trigger_pdata, }, };
вот так выглядит функция инициализации перифирии: CODE static void __init ek_board_init(void) { /* Serial */ at91_add_device_serial(); /* USB Host */ at91_add_device_usbh(&ek_usbh_data); /* USB Device */ at91_add_device_udc(&ek_udc_data); /* SPI */ at91_add_device_spi(ek_spi_devices, ARRAY_SIZE(ek_spi_devices)); //в том числе и AD7606 /* NAND */ ek_add_device_nand(); /* Ethernet */ at91_add_device_eth(&ek_macb_data); /* MMC */ at91_add_device_mmc(0, &ek_mmc_data); /* I2C */ at91_add_device_i2c(ek_i2c_devices, ARRAY_SIZE(ek_i2c_devices)); /* LEDs */ at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds)); /* Push Buttons */ ek_add_device_buttons(); }
Но в файловой системе всё равно ничего нового не появляется. Что я делаю не так? Как обычно добавляются драйверы в платформу?
Сообщение отредактировал TigerSHARC - May 22 2012, 18:23
|
|
|
|
|
May 23 2012, 07:49
|
Знающий
   
Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858

|
Цитата(TigerSHARC @ May 22 2012, 22:22)  Хотя добавил устройства в makeconfig, добавил инициализацию АЦП, в массив ek_spi_devices[]: Вы не добавили а просто скопипастили пример AD не учитывая особенности своей платы. Вот это нужно поместить внутри ek_spi_devices[] Код #if defined(CONFIG_AD7606) || \ defined(CONFIG_AD7606_MODULE) { /* the modalias must be the same as spi device driver name */ .modalias = "ad7606-8", /* Name of spi_driver for this device */ .max_speed_hz = 10000000, /* max spi clock (SCK) speed in HZ */ .bus_num = 0, /* Framework bus number */ .chip_select = 3, /* Framework chip select */ .platform_data = &ad7606_pdata, .irq = gpio_to_irq(AT91_PIN_PA22), .mode = SPI_MODE_3, }, #endif а не в абстрактном board_spi_board_info[] из примера который у вас потом естественно не используетя т.к. для инициализации передается ek_spi_devices[] Код static void __init ek_board_init(void) { ... /* SPI */ at91_add_device_spi( >>> ek_spi_devices <<<< , ARRAY_SIZE(ek_spi_devices)); //в том числе и AD7606 < --- в каком месте ?? ... } Далее - чтобы потом все же что-то заработало, номер SPI и CS нужно подставлять реальные - на которые вы подключили АЦП а не копировать из примера Код .bus_num = 0, /* Framework bus number */ .chip_select = 3, /* Framework chip select */ если только у вас действительно не подключено к spi0, cs3
Сообщение отредактировал sasamy - May 23 2012, 07:53
|
|
|
|
|
May 23 2012, 08:33
|
Знающий
   
Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195

|
Цитата(sasamy @ May 23 2012, 11:49)  Вы не добавили а просто скопипастили пример AD не учитывая особенности своей платы. Вот это нужно поместить внутри ek_spi_devices[] Код #if defined(CONFIG_AD7606) || \ defined(CONFIG_AD7606_MODULE) { /* the modalias must be the same as spi device driver name */ .modalias = "ad7606-8", /* Name of spi_driver for this device */ .max_speed_hz = 10000000, /* max spi clock (SCK) speed in HZ */ .bus_num = 0, /* Framework bus number */ .chip_select = 3, /* Framework chip select */ .platform_data = &ad7606_pdata, .irq = gpio_to_irq(AT91_PIN_PA22), .mode = SPI_MODE_3, }, #endif а не в абстрактном board_spi_board_info[] из примера который у вас потом естественно не используетя т.к. для инициализации передается ek_spi_devices[] Далее - чтобы потом все же что-то заработало, номер SPI и CS нужно подставлять реальные - на которые вы подключили АЦП а не копировать из примера Код .bus_num = 0, /* Framework bus number */ .chip_select = 3, /* Framework chip select */ если только у вас действительно не подключено к spi0, cs3 Посмотрите пожалуйста внимательнее. В моём посте выше так и указано ek_spi_devices[], т.е. АЦП находится в массиве spi устройств, всё нормально. чип селект и номер шины скопипастил сюда с сайта аналога, на самом деле у меня соответствует физическому соединению CODE .bus_num = 1, /* Framework bus number */ .chip_select = 0, /* Framework chip select */[/code]
вобщем всё как вы рекомендовали уже сделано, но новых устройств не появляется(ядро собирается без проблем). Код static void __init ek_board_init(void) { ... /* SPI */ at91_add_device_spi( >>> ek_spi_devices <<<< , ARRAY_SIZE(ek_spi_devices)); //в том числе и AD7606 < --- в каком месте ?? ... } в смысле тут и есть добавление AD7606 в конфигурацию. Ещё непонятно как довабить в систему hrtimer: в menuconfig добавил, необходимые структуры прописал(писал выше об этом), но нигде не могу найти функцию для добавоения в систему( типа at91_add_device_XX). Подобные функции (которые объявлены в board.h) есть только для I2C, SPI, TC, SCC. требуется помощь... P.S. прошу прощения что немного ввёл в заблуждение, так как копировал код напрямую с сайта аналога и правил тут. Потому как кода своего не было под рукой на тот момент.
Сообщение отредактировал TigerSHARC - May 23 2012, 08:37
|
|
|
|
|
May 23 2012, 08:46
|
Знающий
   
Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858

|
Цитата(TigerSHARC @ May 23 2012, 12:33)  Посмотрите пожалуйста внимательнее. В моём посте выше так и указано ek_spi_devices[] Интересный поворот  еще раз привожу ваш пример выше полностью чтобы вы внимательно посмотрели Цитата static struct spi_board_info board_spi_board_info[] __initdata = { #if defined(CONFIG_AD7606) || \ defined(CONFIG_AD7606_MODULE) { /* the modalias must be the same as spi device driver name */ .modalias = "ad7606-8", /* Name of spi_driver for this device */ .max_speed_hz = 10000000, /* max spi clock (SCK) speed in HZ */ .bus_num = 0, /* Framework bus number */ .chip_select = 3, /* Framework chip select */ .platform_data = &ad7606_pdata, .irq = gpio_to_irq(AT91_PIN_PA22), .mode = SPI_MODE_3, }, #endif };
|
|
|
|
Сообщений в этой теме
TigerSHARC Драйвер АЦП Jan 12 2012, 18:42 xor.kruger Нет.
Если вы хотите написать драйверы, то все ... Jan 13 2012, 07:32 Alesha Судя по Linux Kernel Driver DataBase поддержка ind... Jan 13 2012, 07:57 TigerSHARC Спасибо ответившим. Буду копаться в ядрах постарше... Jan 13 2012, 08:13 kurtis Судя по http://kernelnewbies.org/Linux_2_6_39-Driv... Jan 13 2012, 08:59 TigerSHARC Добавить драйвер можно так(http://dmilvdv.narod.ru... Jan 17 2012, 08:08 TigerSHARC Цитата(TigerSHARC @ Jan 17 2012, 12:08) Д... Jan 22 2012, 10:40 xor.kruger Да, после добавления (правки) файлов Kconfig и Mak... Jan 18 2012, 19:53 TigerSHARC Цитата(xor.kruger @ Jan 18 2012, 22:53) Д... Jan 19 2012, 08:07 xor.kruger Попытаюсь вкратце ответить на Ваш вопрос.
В меню-... Jan 23 2012, 08:35 TigerSHARC Цитата(xor.kruger @ Jan 23 2012, 12:35) П... Jan 23 2012, 19:12 xor.kruger ЦитатаВ том то и дело что на сайте аналоговцев пок... Jan 24 2012, 09:30 TigerSHARC На аналоге не указано в каком файле описано
Кодsta... Jan 24 2012, 12:55 Dron_Gus Структура (платформ дата) должна быть описана в фа... Jan 25 2012, 18:20 TigerSHARC Непонятно, как задать требуемую частоту дискретиза... Mar 4 2012, 17:39 TigerSHARC выше написано.
P.S. прошу прощения что немного ввё... May 23 2012, 08:56 sasamy ЦитатаЕщё непонятно как довабить в систему hrtimer... May 23 2012, 09:13  TigerSHARC Цитата(sasamy @ May 23 2012, 13:13) http:... May 23 2012, 09:20 xor.kruger На linux4sam.org (сайт посвященный Embedded Linux ... Jun 20 2012, 10:54 TigerSHARC Цитата(xor.kruger @ Jun 20 2012, 13:54) Н... Jun 20 2012, 12:50
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|