1

Тема: LIN injector

Здравствуйте. Скажите, canny 7 может выступать ретранслятором lin? Т.е. подключить canny в разрыв шины LIN, передавать данные в обе стороны (т.е. просто чтобы шина продолжила функционировать так же, как и без canny), а в нужный момент подменять ответ от заданного адреса (конкретного блока) на другой.

Фрейм в шине выглядит так: «55 A8 00 00 00». Либо «55 A8» если slave не откликается.
При обращении мастера к блоку A8, canny от слейва принимаем ответ 00 00 00, подменяет его на 00 00 FF и передает мастеру.

2

Re: LIN injector

В общем случае - может.
Посмотрите здесь:

https://forum.canny.ru/viewtopic.php?id=591

3

Re: LIN injector

К сожалению, так и не смог разобраться. Можно ли пример простейшего лин ретранслятора? Скороть шины 9600, подтяжка к плюсу. Попробую включить CANNY вразрыв LIN и дальше, если заработает буду пытаться подменять некоторые данные.

4

Re: LIN injector

"55" - это синхроимпульсы Master для подстройки скорости обмена данными. "A8" - это идентификатор узла вместе с битами четности. Значение идентификатора, по стандарту LIN, не может быть больше 63 (0x3F). В данном случае идентификатор Slave-узла равен 0x28.
Во вложении пример LIN-шлюза, заменяющего любые значения байта D2 на 0xFF.

Вложений в сообщении

Иконка вложения c7_lin_bridge.cfd 2.76 кб, скачивался 223 раз, последний раз 2020-01-27 

5

Re: LIN injector

Подробно изучил содержимое сообщений в шине своего авто.
Всего в шине 4 ID :  0x021, 0x022, 0x028, 0x029.
21 и 22 содержат данные от мастера (он сам "отвечает" на запросы с этими ID)
28 и 29 содержат ответы от слейвов.
Длинна любого ответа на запрос любого id всегда 4 байта.
Получилось сделать шлюз только в одну сторону - от мастера (тот который в машине, не в программе) к слейву.
Обратно данные не проходят. Хотя зеленым светодиодом проверил - нажатия кнопок на физическом слейве canny видит.

Вложений в сообщении

Иконка вложения c7_project_LIN_1.0.1.cfd 9.21 кб, скачивался 188 раз, последний раз 2020-01-28 

6

Re: LIN injector

Немного подправил диаграмму в части работы мультислейва в соответствии с информацией из wiki и форума, но пока не "взлетело"

Вложений в сообщении

Иконка вложения c7_project_LIN_1.0.3.cfd 9.48 кб, скачивался 200 раз, последний раз 2020-01-28 

7 (28-01-2020 15:47:06 отредактировано ser9ga)

Re: LIN injector

Еще подправил, в целом - заработало. Подменять сообщения - получилось (эта диаграмма без подмены). Толь заметил, что физический слейв (панель управления климатом) стал "тормозить". Т.е. дольше откликаться на нажития кнопок (задержка плавающая) или иногда совсем не реагировать на нажатия (было даже 2-3 быстрых нажатия подряд игнорировались). Куда копать?

UPD: Не совсем понимаю, почему 1.0.5 работает, а 1.0.3 - нет. Если в 1.0.3 регистр зеленого светодиода подключить ко входам коммутаторов в верхней части диаграммы с условием x>=3 (т.е. включать З.С. если в  LIN2 SLAVE пришел запрос с ID 028 или 029). При включении зажигания (пробуждение шины) зеленая лампа моргает в течении секунды и перестает. Т.е. проходит некоторое количество запросов с ID 28 и 29 а потом они перестаю опрашиваться.

Вложений в сообщении

Иконка вложения c7_project_LIN_1.0.5.cfd 8.12 кб, скачивался 207 раз, последний раз 2020-01-28 

8

Re: LIN injector

Попробуйте немного доработанную диаграмму и сообщите результаты.
Сообщите, пожалуйста, какая используется версия CannyLab и CCX?
1.0.3 не работала правильно по причине того, что при использовании мультислейва в регистрах ID принятых данных перестают отображаться идентификаторы, используемые в мультислейв - их обработка выполняется драйвером в асинхронном режиме и не попадает в диаграмму, хотя регистр принятых данных отражает факт приема данных с этими идентификаторами.

Вложений в сообщении

Иконка вложения c7_project_LIN_1.0.5_1.cfd 7.91 кб, скачивался 209 раз, последний раз 2020-01-28 

9

Re: LIN injector

Версия cannylab 1.41, ccx: c7v001075.ccx.

Попробовал вашу диаграмму (только период в шим уменьшил с 50 до 30 (заполнение 15), что бы было ближе к штатной частоте опроса (~14-15мс на каждый id)

Задержки ушли, все здорово. Большое спасибо!

10

Re: LIN injector

Всплыла такая проблема. Если после восстановления питания в регистре начала передачи LINx появляется 1 - начинается отправка сообщений. Если установить 0, отправка не останавливается.
Вопрос: как остановить отправку ответов от слева?

11 (05-02-2020 20:12:04 отредактировано ser9ga)

Re: LIN injector

пример

Вложений в сообщении

Иконка вложения c7_project_ECU_plus_1.9.2---.cfd 106.64 кб, скачивался 205 раз, последний раз 2020-02-05 

12

Re: LIN injector

ser9ga пишет:

Всплыла такая проблема. Если после восстановления питания в регистре начала передачи LINx появляется 1 - начинается отправка сообщений. Если установить 0, отправка не останавливается.


Это нормальная работа драйвера LIN в режиме SLAVE. Подробнее здесь:https://wiki.canny.ru/index.php?title=C … 0.B5_SLAVE

Вопрос: как остановить отправку ответов от слева?

Либо записав в регистр конфигурации LIN значение 0, либо "отправив" LIN сообщение с длиной = 0

13

Re: LIN injector

ID, которые отвечают на запросы физического мастера в режиме мультислейв перестают читаться. Т.е. нельзя получить информацию от физического слейва с ID x028 (к примеру), если до этого этот ID использовался в одном из доп буферов мультислейва (физический слейв отключается с помощью реле на время передачи сообщений от канни).
Пробовал записывать пустые значения в допбуферы мультислейва после отправки сообщений канни, пробовал записивать нулевое значение в регистр установок LIN на 500 мс после отправки сообщений от канни - не помогло.

14

Re: LIN injector

ser9ga пишет:

Пробовал записывать пустые значения в допбуферы мультислейва после отправки сообщений канни

Попробуйте именно отправить сообщение с ID=0 и LEN=0 через допбувер который нужно очистить. То есть параллельно с Номер допбуфера=<ваш номер>, ID=0 и LEN=0 кратко установить регистр отправки сообщения =1.

15

Re: LIN injector

Константин, CANNY пишет:

Попробуйте именно отправить сообщение с ID=0 и LEN=0 через допбувер который нужно очистить. То есть параллельно с Номер допбуфера=<ваш номер>, ID=0 и LEN=0 кратко установить регистр отправки сообщения =1.

Спасибо, помогло.