Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru
Партнеры:
otladka.com.ua - г.Киев

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:5
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:9
Форум » starterkit.ru » Отладочные платы » SK-iMX53
Неправильная скорость CAN
misha
Добавлено 10.04.2013 22:58
0
Сообщение: 1
misha
5

Пункты: 1208
Регистрация: 20.02.2013
Из: СПб
Выяснилось, что скорость CAN-порта на i.mx53 с предустановленным образом системы не соответствует установкам. При установке 10 кбит/с реальная скорость оказывается 27.8 кбит/с (по осциллографу). В общем, при любых значениях скорость оказывается ровно в 2.78 раза больше заявленной.

ip -d link show can0 показывает, что clock=24 МГц.

Подскажите, как это можно поправить?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 11.04.2013 11:24 Редактировалось 18.04.2013 16:28 Сообщение: 2
sasamy
4.70

Пункты: 77331
Регистрация: 14.08.2009
...
Спуститься к концу Подняться к началу
Персональная информация
misha
Добавлено 18.04.2013 01:00 Редактировалось 18.04.2013 01:01 Сообщение: 3
misha
5

Пункты: 1208
Регистрация: 20.02.2013
Из: СПб
Цитата
Попробуйте откатить драйвер CAN к фрискейловской версии
http://starterkit.ru/html/index.php?name=forum&op=view&id=17631&num=2#17713


В принципе, ошибка не смертельная, можно пока просто скорость скорректировать.
Попробую, когда хотя бы приблизительно пойму, как это сделать.

Тут еще одна неприятная история с CANом: на более-менее высоких скоростях (где-то за 200 кбит/с) работать невозможно из-за неприлично плавных фронтов на выходе драйвера. В качестве примера осциллограмма сигнала CANH-CANL на 500 кбит/с:
title

Смотрел даташит на драйвер MAX3051. За плавность фронтов отвечает резистор R12, который выбран 11К, хотя в документации рекомендуется 25-200К. Но это сути не меняет, я пробовал замыкать этот резистор, что в теории должно дать максимальную скорость. Но фронты вообще никак при этом не меняются.

На входе драйвера фронты всегда четкие.

Неужели опять отправлять плату в ремонт?
Спуститься к концу Подняться к началу
Персональная информация
Pavel Ivanchenko
Добавлено 18.04.2013 12:48 Сообщение: 4
Pavel Ivanchenko
Admin
4.39

Пункты: 91438
Регистрация: 24.03.2009
Пол: Мужчина
Цитата
Неужели опять отправлять плату в ремонт?
Отправляйте, выставим счет за ликбез.
Дифференциальные сигналы так не смотрят, а если и смотрят, то как минимум математикой по двум каналам ...
Не работает же по той причине, что Вы уже выяснили - неправильное вычисление битрейта в драйвере.
Позже попробуем выяснить причину.
Спуститься к концу Подняться к началу
Персональная информация
misha
Добавлено 18.04.2013 15:41 Редактировалось 18.04.2013 16:00 Сообщение: 5
misha
5

Пункты: 1208
Регистрация: 20.02.2013
Из: СПб
Цитата
Цитата
Неужели опять отправлять плату в ремонт?
Отправляйте, выставим счет за ликбез.
Дифференциальные сигналы так не смотрят, а если и смотрят, то как минимум математикой по двум каналам ...
Не работает же по той причине, что Вы уже выяснили - неправильное вычисление битрейта в драйвере.
Позже попробуем выяснить причину.


И как же их смотрят? Напишите, я перемеряю.
Ошибка со скоростью CANа в этом эксперименте была учтена. Смотрите на время горизонтальной развертки осциллограммы.

UPD: извиняюсь, это действительно моя вина. Не заметил, что крокодил от осциллографа был присоединен к земле, а не к CANL, хотя я собирался как раз измерять сигнал на резисторе.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 18.04.2013 16:21 Редактировалось 18.04.2013 16:44 Сообщение: 6
sasamy
4.70

Пункты: 77331
Регистрация: 14.08.2009
Цитата

В общем, при любых значениях скорость оказывается ровно в 2.78 раза больше заявленной.


Ошибка в схеме тактирования у Freescale. Чтобы исправить, допишите переключение референсной частоты для контроллеров FlexCAN в файле arch/arm/mach-mx5/clock.c перед SSI
Цитата

int __init mx53_clocks_init(unsigned long ckil, unsigned long osc, unsigned long ckih1, unsigned long ckih2)
{
.......

/* starterkit */
clk_set_parent(&can1_clk[0], &lp_apm_clk);
clk_set_parent(&can2_clk[0], &lp_apm_clk);

/* Move SSI clocks to SSI_LP_APM clock */
clk_set_parent(&ssi_lp_apm_clk, &lp_apm_clk);



только не перепутайте - там есть аналогичная ф-ция для imx51, нам нужен imx53. Откатывать на родной драйвер Freescale НЕ НАДО - он глючный, оставляйте в ядре и в юзерспейс при поднятии интерфейсов все как есть в BSP стартеркит, только эти строчки допишите
Вернее сказать ошибка не в схеме, а в том что после сброса FleaxCAN тактируется с ipg 66 МГц, а переключение на lp_apm 24 МГц они сделать забыли. В результате clk_get_rate показывает 24 МГц (как и должно быть) а реально частота 66 МГц. 24 МГц лучше подходит для CAN - все стандартные битрейты получаются без ошибки.

Цитата

# can-calc-bit-timing -c 24000000 flexcan
Bit timing parameters for flexcan with 24.000000 MHz ref clock
nominal real Bitrt nom real SampP
Bitrate TQ[ns] PrS PhS1 PhS2 SJW BRP Bitrate Error SampP SampP Error CAN_CTRL
1000000 83 4 4 3 1 2 1000000 0.0% 75.0% 75.0% 0.0% 0x011a0003
800000 83 5 6 3 1 2 800000 0.0% 80.0% 80.0% 0.0% 0x012a0004
500000 125 6 7 2 1 3 500000 0.0% 87.5% 87.5% 0.0% 0x02310005
250000 250 6 7 2 1 6 250000 0.0% 87.5% 87.5% 0.0% 0x05310005
125000 500 6 7 2 1 12 125000 0.0% 87.5% 87.5% 0.0% 0x0b310005
100000 625 6 7 2 1 15 100000 0.0% 87.5% 87.5% 0.0% 0x0e310005
50000 1250 6 7 2 1 30 50000 0.0% 87.5% 87.5% 0.0% 0x1d310005
20000 3125 6 7 2 1 75 20000 0.0% 87.5% 87.5% 0.0% 0x4a310005
10000 6250 6 7 2 1 150 10000 0.0% 87.5% 87.5% 0.0% 0x95310005
Спуститься к концу Подняться к началу
Персональная информация
misha
Добавлено 18.04.2013 16:51 Сообщение: 7
misha
5

Пункты: 1208
Регистрация: 20.02.2013
Из: СПб
Цитата

Ошибка в схеме тактирования у Freescale. Чтобы исправить, допишите переключение референсной частоты для контроллеров FlexCAN в файле arch/arm/mach-mx5/clock.c перед SSI


А что потом? Запустить заново buildroot, чтобы он все пересобрал?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 18.04.2013 18:17 Сообщение: 8
sasamy
4.70

Пункты: 77331
Регистрация: 14.08.2009
пересобрать только ядро
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Отладочные платы » SK-iMX53