Leroy
Пункты: 386
Регистрация: 14.10.2015
Здравствуйте, испытываю трудности с работой по CAN.
Интерфейс стартует и в системе виден, включил отладочный вывод:
Цитата dmesg | fgrep can
[ 0.286733] i2c i2c-0: can't use DMA
[ 1.217219] vcan: Virtual CAN interface driver
[ 1.220458] slcan: serial line CAN interface driver
[ 1.224043] slcan: 10 dynamic interface channels.
[ 1.233308] 2090000.flexcan supply xceiver not found, using dummy regulator
[ 1.239833] flexcan 2090000.flexcan: device registered (reg_base=a0a48000, irq=28)
[ 1.553329] can: controller area network core (rev 20120528 abi 9)
[ 1.568635] can: raw protocol (rev 20120528)
[ 1.573667] can: broadcast manager protocol (rev 20120528 t)
[ 1.580141] can: netlink gateway (rev 20130117) max_hops=1
[ 15.898451] flexcan 2090000.flexcan can0: writing ctrl=0x01232084
[ 15.903259] flexcan 2090000.flexcan can0: flexcan_set_bittiming: mcr=0x5980000f ctrl=0x01232084
[ 15.903268] flexcan 2090000.flexcan can0: flexcan_chip_start: writing mcr=0x79a20209
[ 15.903278] flexcan 2090000.flexcan can0: flexcan_chip_start: writing ctrl=0x0123acd4
[ 15.903319] flexcan 2090000.flexcan can0: flexcan_chip_start: reading mcr=0x60a20209 ctrl=0x0123acd4
Собрал и задеплоил canutils от freescale по инструкции:
https://community.freescale.com/docs/DOC-1437
Судя по dts файлу на верх выведен flexcan2 (hola-ieb), в
i.MX 6Solo/6DualLite Applications Processor Reference Manual указано что для получения сигнала на пины PAD_KEY_COL4 и PAD_KEY_ROW4 нужно подать 0x000. В dts же конфигурируется с 0x80000000.
Кроме этого несоответсвия больше ничего не вижу, что-то еще нужно сделать? Может я делаю что-то не так?
Для отправки по шине использую cansend, прослушивание шины через candump.
Linux kernel 4.1
sasamy
Пункты: 83556
Регистрация: 14.08.2009
Leroy
Пункты: 386
Регистрация: 14.10.2015
0x80000000 == 10000000000000000000000000000000
видимо зануляет регистр со старшей единицей
нашел небольшой
гайд по регистрам , советуют 0 не использовать мол не будет работать. В таком случае совсем непонятно что не так.
Возможно необходимо сделать pull up, какое значение использовать PAD_CTL_PUS_47K_UP, PAD_CTL_PUS_100K_UP или PAD_CTL_PUS_22K_UP?
sasamy
Пункты: 83556
Регистрация: 14.08.2009
Цитата
нашел небольшой гайд по регистрам, советуют 0 не использовать мол не будет работать
я вас вообще не понимаю - о чем вы ?
Цитата
The format is fsl,pins = <PIN_FUNC_ID CONFIG>, PIN_FUNC_ID is a pin working on a specific function, CONFIG is the pad setting value like pull-up for this pin.
Цитата
flexcan2 {
pinctrl_flexcan2_hola: flexcan2-hola {
fsl,pins = <
MX6QDL_PAD_KEY_COL4__FLEXCAN2_TX 0x80000000
MX6QDL_PAD_KEY_ROW4__FLEXCAN2_RX 0x80000000
>;
};
};
функциональное назначение для мультиплексоров задается MX6QDL_PAD_KEY_COL4__FLEXCAN2_TX, MX6QDL_PAD_KEY_ROW4__FLEXCAN2_RX
что означает CONFIG = 0x80000000 описано и в доке ядра и вашей ссылке предельно ясно
Цитата
NO_PAD_CTL(1 << 31): indicate this pin does not need config.
Цитата
The value 0x80000000 is special and means "I don't know and don't change from the default". Otherwise, it's set according to the following chart (basically the bitfields of the IOMUXC lower 17 bits):
Leroy
Пункты: 386
Регистрация: 14.10.2015
Теперь вижу, проморгал.
В режиме loopback все работает, я вижу посылки
Код debian@arm:~$ candump
interface = can0, family = 29, type = 3, proto = 1
<0x123> [4] 0b 16 21 2c
<0x123> [4] 0b 16 21 2c
<0x123> [4] 0b 16 21 2c
<0x123> [4] 0b 16 21 2c
<0x123> [4] 0b 16 21 2c
В режиме triple-sampling ровным счетом ничего не происходит, я не слышу что происходит на шине, на шине не видно моих посылок.
Смотрел осцилографом, по физике никакого движения нет. Что еще может быть?
sasamy
Пункты: 83556
Регистрация: 14.08.2009
Цитата
Что еще может быть?
скорей всего некорректно прописан мнтерфейс в DT
Цитата
[ 1.239833] flexcan 2090000.flexcan : device registered (reg_base=a0a48000, irq=28)
этой первый интерфейс а нужен второй
Цитата
&flexcan2 {
pinctrl_flexcan2_hola: flexcan2-hola {
Цитата
flexcan 2094000.flexcan : device registered (reg_base=c0a70000, irq=143)
еще irq подозрительный но скорей всего в ванильном ядре свои порядки. В общем смотрите соседние файлы с imx6 и делайте по аналогии, возможно есть какие-то отличия в ванильном ядре.
Leroy
Пункты: 386
Регистрация: 14.10.2015
Цитата
это первый интерфейс а нужен второй
Да в этом и было дело, регистрировался не тот интерфейс, спасибо большое!