Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: mcp2510 через SPI к at91sam9260
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Linux
Letum
Помогите, пожалуйста, разобраться с драйвером.
Есть самодельная плата на at91sam9260 к которой по SPI подключен mcp2510.
Разводка:



В файле борды прописано:

Код
static struct mcp251x_platform_data mcp251x_info = {
        .oscillator_frequency = 8000000,
//        .board_specific_setup = &mcp251x_setup,
        .model = CAN_MCP251X_MCP2510,
//        .power_enable = mcp251x_power_enable,
//        .transceiver_enable = NULL,
};

/*
* SPI devices.
*/
static struct spi_board_info ek_spi_devices[] = {

        { /* CAN */
                .modalias = "mcp251x",
                .platform_data = &mcp251x_info,
                .chip_select = 0,
                .max_speed_hz = 2 * 1000 * 1000,
                .bus_num        = 1,
                .irq = AT91_PIN_PC15,
        },
};


Dmesg выдаёт:
Код
atmel_spi atmel_spi.1: Atmel SPI Controller at 0xfffcc000 (irq 13)
mcp251x spi1.0: probed


Но в /dev can0 устройство не появляется.
Dron_Gus
Его там и не будет.
Код
root@crux:~# ifconfig -a                                                        
can0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-0
          NOARP  MTU:16  Metric:1                                              
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0                    
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0                  
          collisions:0 txqueuelen:10                                            
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

И
Код
root@crux:~# ls /sys/class/net/                                                
can0  eth0  lo
Letum
Да, недосмотрел я. Появилась в ifconfig-е, но не поднимается:
Код
[root@(none) ~]# ifconfig can0 up
mcp251x spi1.0: bit-timing not yet defined
mcp251x spi1.0: unable to set initial baudrate!
ifconfig: SIOCSIFFLAGS: Invalid argument

sasamy
Цитата(Letum @ Sep 7 2012, 19:25) *
Да, недосмотрел я. Появилась в ifconfig-е, но не поднимается:


ifconfig с can bus вам не поможет - используйте iproute

https://www.ridgerun.com/developer/wiki/ind...and_use_CAN_bus

Letum
Цитата(sasamy @ Sep 7 2012, 21:56) *
ifconfig с can bus вам не поможет - используйте iproute

https://www.ridgerun.com/developer/wiki/ind...and_use_CAN_bus

Использую последний buildroot c iproute2 из комплекта.
Не проходит
Код
# ip link set can0 type can bitrate 1000000
mcp251x spi1.0: bit-timing calculation not available
RTNETLINK answers: Invalid argument

Может быть такое, что я неправильно переобозначил ноги RX и TX в arch/arm/mach-at91/at91sam9260_devices.c
И я несколько не понял, что делать с ногой CAN_RES
sasamy
Цитата(Letum @ Sep 8 2012, 18:38) *
mcp251x spi1.0: bit-timing calculation not available


включите в ядре

[*] CAN bit-timing calculation
Letum
Вы не поверите, ставлю Bit-timing calculation и:
Код
uncompression error

-- System haltedRomBOOT
Letum
Предыдущее поправил, теперь грузится, но:
Код
ip link set can0 type can bitrate 1000000
mcp251x spi1.0: bitrate error 33.3% too high
RTNETLINK answers: Numerical argument out of domain
[root@(none) ~]# ifconfig can0 up
mcp251x spi1.0: bit-timing not yet defined
mcp251x spi1.0: unable to set initial baudrate!
ifconfig: SIOCSIFFLAGS: Invalid argument

Если указать частоту меньше, то:
Код
[root@(none) ~]# ip link set can0 type can bitrate 500000
[root@(none) ~]# ifconfig can0 up
setting trigger mode 2 for irq 111 failed (gpio_irq_type+0x0/0x18)
mcp251x spi1.0: failed to acquire irq 111
ifconfig: SIOCSIFFLAGS: Invalid argument
Dron_Gus
У AT91 была какая-то проблемма с IRQ на GPIO. Вроде как не умеет он реагировать только на один фронт. А драйвер реквестит irq с IRQF_TRIGGER_FALLING. попробуйте в платдату добавить:
Код
.irq_flags = (IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING),
Letum
Не проходит.
Dron_Gus
Что значит не проходит? Ошибки при компиляции? Или все та же?

Цитата(Letum @ Sep 7 2012, 18:38) *
Код
                .irq = AT91_PIN_PC15,

К тому же, Вы указываете номер пина, а не IRQ. Используйте gpio_to_irq().
Letum
Раньше всё собиралось, но так же ругалось при попытке поднятия интерфейса can0
При замене .irq = AT91_PIN_PC15 на .irq = gpio_to_irq(AT91_PIN_PC15) ругается компилятор
Код
arch/arm/mach-at91/board-sam9260ek.c:153:3: ошибка: элемент инициализатора не является константой

Что я забыл? Насколько я понял, надо перевести PIN в GPIO, но как?
Dron_Gus
Посмотрите как сделано в других AT91 платах. gpio_to_irq это функция. А вы пытаетесь проинициализировать элемент структуры при ее обьявлении. Естественно компилятор не может это сделать.
Letum
Поправлю, попробую. В других AT91 платах данная функция, к сожалению, не используется.
Letum
Всё равно не даёт никакого результата.
Letum
Вроде запустилось, поднялось, и даже на осциллографе видно, что сообщение ушло. Сегодня попробую снять лог с автомобиля.
А есть ли под никсами программы, которые позволяют по кан шине производить опрос ЭБУ, а не просто снимать логи?
Letum
В общем у меня ничего не получилось. При выставлении скорости в 500000 и поднятии интерфейса на приборной панели падают все стрелки приборов. Ни cansniffer, ни candump ничего не выдают. При переключении на скорость 250000 приборка оживает, но начинает иногда подёргиваться. В линии ничего не вижу. Приборка на CAN.

Помогите пожалуйста, замучался.
Dron_Gus
Код
ip link set can0 type can listen-only on
Letum
Цитата(Dron_Gus @ Sep 20 2012, 17:39) *
Код
ip link set can0 type can listen-only on

А скорость выставлять в таком случае?
Letum
Спасибо, но это оказалось лишним. Как не странно, но виной всему неверный драйвер. Перешёл на 34 ядро и всё заработало, драйвер там сильно изменён.
Теперь осталось проанализировать дамп.
Dron_Gus
Если не секрет, можно поподробней, про Вашу работу. Когда-то приходилось запускать CAN на трекере, но в итоге этот пункт из ТЗ исключили и так и не удалось поработать с реальными машинами. Тольтко один раз снимали дамп с мерседеса ML, который так и не смогли расшифровать. А сейчас планируется подключение к can-шине автобусов и грузового транспорта, даже не знаю с чего начать изучать вопрос. Были какие-то стандарты SAE J1939 лет 5 назад, они еще актуальны?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.