реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Драйвер АЦП, для ARM9
TigerSHARC
сообщение May 22 2012, 18:22
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
sasamy
сообщение May 23 2012, 07:49
Сообщение #17


Знающий
****

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
TigerSHARC
сообщение May 23 2012, 08:33
Сообщение #18


Знающий
****

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
sasamy
сообщение May 23 2012, 08:46
Сообщение #19


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(TigerSHARC @ May 23 2012, 12:33) *
Посмотрите пожалуйста внимательнее. В моём посте выше так и указано ek_spi_devices[]


Интересный поворот sm.gif еще раз привожу ваш пример выше полностью чтобы вы внимательно посмотрели

Цитата
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
};
Go to the top of the page
 
+Quote Post
TigerSHARC
сообщение May 23 2012, 08:56
Сообщение #20


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



выше написано.
P.S. прошу прощения что немного ввёл в заблуждение, так как копировал код напрямую с сайта аналога и правил тут. Потому как кода своего не было под рукой на тот момент.

ну не было кода под рукой когда писал пост вот и указал то что скопировал с сайта. Естественно я добавил AD7606 в уже существующую структуру(иначе бы ядро не собралось).

Проще говоря, все ваши замечания уже учтены. Но устройство не появляется
Go to the top of the page
 
+Quote Post
sasamy
сообщение May 23 2012, 09:13
Сообщение #21


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата
Ещё непонятно как довабить в систему hrtimer


http://electronix.ru/forum/index.php?showt...t&p=1039729

для at91sam9g45 настоящий hrtimer есть только в -rt ветке (таймеры TC включенные каскадом), соответственно нужно наложить патч. http://www.at91.com/linux4sam/bin/view/Lin.../RealTime#Setup

Цитата
Но устройство не появляется


Если структура spi-device прописана верно, как минимум будет вызвана ф-ция probe драйвера AD - просмотрите лог загрузки - там должны быть сообщения об ошибках, дополнительно включите отладочные сообщения.

Сообщение отредактировал sasamy - May 23 2012, 09:16
Go to the top of the page
 
+Quote Post
TigerSHARC
сообщение May 23 2012, 09:20
Сообщение #22


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



Цитата(sasamy @ May 23 2012, 13:13) *
http://electronix.ru/forum/index.php?showt...t&p=1039729

для at91sam9g45 настоящий hrtimer есть только в -rt ветке, соответственно нужно наложить патч. http://www.at91.com/linux4sam/bin/view/Lin.../RealTime#Setup



Если структура spi-device прописана верно, как минимум будет вызвана ф-ция probe драйвера AD - просмотрите лог загрузки - там должны быть сообщения об ошибках, дополнительно включите отладочные сообщения.


мне интересно какую функцию вщять для инициализации тригера (типа at91_add_device...). непонятно. на сайте аналога сказано что нужно инициализировать таким образом как любое другое устройство. Но подълдящую функцию найти не могу.
логи посмотрю сегодня вечером.


Сообщение отредактировал TigerSHARC - May 23 2012, 09:21
Go to the top of the page
 
+Quote Post
xor.kruger
сообщение Jun 20 2012, 10:54
Сообщение #23


Местный
***

Группа: Свой
Сообщений: 290
Регистрация: 17-08-08
Из: Чернигов
Пользователь №: 39 647



На linux4sam.org (сайт посвященный Embedded Linux для Atmel"овских процессоров) появилась статейка о том как прикрутить ADC драйвер для семейств at91sam9xxxx : http://www.at91.com/linux4sam/bin/view/Lin...AM/IioAdcDriver
Go to the top of the page
 
+Quote Post
TigerSHARC
сообщение Jun 20 2012, 12:50
Сообщение #24


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



Цитата(xor.kruger @ Jun 20 2012, 13:54) *
На linux4sam.org (сайт посвященный Embedded Linux для Atmel"овских процессоров) появилась статейка о том как прикрутить ADC драйвер для семейств at91sam9xxxx : http://www.at91.com/linux4sam/bin/view/Lin...AM/IioAdcDriver

Да, я видел эту статью, но вот только самое важного нет и написано:
Please note that the setup of the timer counters in themselves is not achieved by this driver, so you will have to do it yourself. However, some dummy example of how to setup the timer-counter-0 is attached to this page.

В этом-то и проблема - написать драйвер хардварного триггера для IIO. Софтовые триггеры совсем не подходят(зачем может понадобится тактировать АЦП клоком с таким огромным джиттером?).

Сообщение отредактировал TigerSHARC - Jun 20 2012, 12:59
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 23:48
Рейтинг@Mail.ru


Страница сгенерированна за 0.01472 секунд с 7
ELECTRONIX ©2004-2016