Расширение кол-ва I/O портов.

Все вопросы по железу
Pavel Buyevich
Posts: 30
Joined: 30 Aug 2014, 09:56
Your CAR: I go on foot
SECU version: DIY SECU-3
Been thanked: 4 times
Contact:

Расширение кол-ва I/O портов.

Post by Pavel Buyevich »

Приветствую.
Недавно встала необходимость увеличения кол-ва I/O портов на блоке (эмулятор бензофорсунок для управления гбо 4 поколения с сохранением всех оставшихся рюшек - автоподсос, вентилятор, бензонасос, тахометр, итп). Посему встал вопрос о блоке расширения. Вопрос стоит о том, как разумнее организовать коммуникацию блока расширения с блоком SECU с минимальным вторжением в готовую плату - ADD_IO_1/2 используя I2C протокол? Проблема в том что там последовательно висят два резистора по 10ком, из за которых коммуникация становится невозможной (не ходелось бы мудрить схему повышения уровней или выдирать эти резисторы). Второй вариант используя SPI повесить параллельно с микрухой датчика детонации. Можно ли в этом случае реализовать выбор адресуемого устройства аппаратно (шина SS или CS в обозначении микросхемы) сделав простой инвертер уровней на одном транзисторе? И как скажется на работе системы обнаружения детонации факт присутсвия еще одного устройства отбирающего процессорное время? Хотелось бы услышать мнение авторов проекта, какой путь выбрали бы они. Спасибо.
User avatar
STC
Posts: 13843
Joined: 30 Apr 2013, 23:41
Your CAR: AZLK 2140
SECU version: DIY SECU-3
Location: North Korea
Has thanked: 2160 times
Been thanked: 4335 times
Contact:

Re: Расширение кол-ва I/O портов.

Post by STC »

Резисторы можешь ставить какие тебе нужны. Да, можно как по I2C, так и по SPI.
В первом случае прийдется отказаться от 3 и 4 каналов зажигания или переназначить их на другие свободные порты. Так как I2C не используется, то он свободен, единственное там в некоторых частях кода могут использоваться его регистры в качестве битовых переменных и нужно будет там сделать замену на обычные переменные из ОЗУ, но только не забывать про атомарность обращений к ним.
Во втором случае дополнительно устройство подключить параллельно HIP9011. Прийдется при этом пожертвовать одним портом для CS. Можно воспользоваться тем, который идет на ногу TEST HIP9011 и убрать из кода инициализации HIP9011 тестирование отклика (без этого можно спокойно жить). В момент каждого такта двигателя производится передача данных в HIP9011, это занимает мало времени. Для разделения SPI между 2 устройствами запросы можно ставить в простую очередь (или просто блокировка с ожиданием, по типу семафора или мутекса). Еще лучше перенести код из прерывания в основной цикл, тогда проще будет (но есть нюансы, например можно ли вносить изменения в настройки HIP9011 во время активного INT/HOLD).
Я бы делал через SPI, так как в этом случае мы ничего не теряем.
Author of the SECU-3™ project http://SECU-3.org. An open source engine control unit / Ignition control system, (C) 2007.
Клуб проекта в Facebook https://www.facebook.com/groups/secu3club
Клуб проекта ВКонтакте https://vk.com/secu3club (вступаем!)
Pavel Buyevich
Posts: 30
Joined: 30 Aug 2014, 09:56
Your CAR: I go on foot
SECU version: DIY SECU-3
Been thanked: 4 times
Contact:

Re: Расширение кол-ва I/O портов.

Post by Pavel Buyevich »

Окей спасибо. Кстати, я полагаю что именно по такой схеме будет добавляться возможность управления распределенным впрыском в будущем (если не вносить радикальных изменений в схему и печатку)?
User avatar
STC
Posts: 13843
Joined: 30 Apr 2013, 23:41
Your CAR: AZLK 2140
SECU version: DIY SECU-3
Location: North Korea
Has thanked: 2160 times
Been thanked: 4335 times
Contact:

Re: Расширение кол-ва I/O портов.

Post by STC »

Кстати, я полагаю что именно по такой схеме будет добавляться возможность управления распределенным впрыском в будущем (если не вносить радикальных изменений в схему и печатку)?
Распределенный фазированный впрыск на 4 форсунки можно сделать и с существующим железом (без платы расширения), что и будет сделано и только потом плата расширения. Для начала с головой хватит и распределенного одновременного, что уже есть сейчас. А так, да.
Author of the SECU-3™ project http://SECU-3.org. An open source engine control unit / Ignition control system, (C) 2007.
Клуб проекта в Facebook https://www.facebook.com/groups/secu3club
Клуб проекта ВКонтакте https://vk.com/secu3club (вступаем!)
User avatar
mmlevin
Posts: 245
Joined: 13 May 2013, 09:44
Your CAR: I go on foot
SECU version: DIY SECU-3
Location: Россия, Воронеж
Has thanked: 2 times
Been thanked: 63 times

Re: Расширение кол-ва I/O портов.

Post by mmlevin »

Рисовал тут схему инжекторного жгута для подключения блока Secu, со всеми положенными реле и т.п. Столкнулся с тем, что входы в запасе еще есть, как минимум 2-3, а вот с выходами проблема. Между тем, имеется ряд выходов, которые занимают драгоценный порт контроллера и могли бы быть вынесены на расширитель. Это следующие сигналы:
  • 1. ECF
  • 2. ST_BLOCK
  • 3. CE
  • 4. FL_PUMP
  • 5. PWR_RELAY
  • 6. INTK_HEAT
То есть видим как минимум 6 низкоскоростных, фактически триггерных сигналов, которые могли бы быть вынесены на расширитель. Для UNI_OUT[1..3] возможность вынесения зависит от того, как быстро должно меняться значение вывода, т.е. такие вещи, как шифт-лампа, сигнализатор нагрузки и т.п. теоретически могли бы быть тоже вынесены.
Здесь предлагалось использовать микрочиповские порт-экспандеры, например MCP23S08, для организации двунаправленного ввода-вывода. Однако, думаю, что проблема с недостатком выходных портов при наличии входных имеет место не только у меня, в связи с чем пришла идея применения обычного регистра 74HC595. Он интересен тем, что стоит вдесятеро дешевле экспандера, между тем у меня есть опыт его применения в промышленной аппаратуре, где он стоит, скажем так, в жизненно важных узлах и переключается довольно часто. Кроме того, по интерфейсу управления он полностью совместим с SPI в режиме MODE0, т.е. с самым распространенным.
Как бы это могло выглядеть программно. Есть некая опция компиляции, включающая поддержку вывода данных на регистр. В принципе, можно сделать и без опции - работать все равно будет. В коде, отвечающем за перенаправление входов-выходов задействуется часть ранее зарезервированных plugs - как это будет по-русски? Предположим, слотов. То есть к IOP_ECF, IOP_ST_BLOCK и т.д. добавятся IOP_ECF_EXT, IOP_ST_BLOCK_EXT и их обработчики, которые просто будут выставлять или сбрасывать соответствующий бит в байте, хранящем содержимое для вывода на регистр. В тех местах кода, где происходит сейчас установка значения вывода вроде IOCFG_SET(IOP_FL_PUMP, s) , добавится вызов IOCFG_SET(IOP_FL_PUMP_EXT, s). А непосредственная запись в регистр будет производиться из главного цикла, в моменты, когда нет обращения к HIP9011 и/или другим SPI устройствам, если таковые появятся. Пожертвовать придется функцией одной из линий, идущих на разъем расширения (нужен будет CS на регистр), при этом в конфигурации этих выходов можно добавить функцию IOP_EXTERNAL_REGISTER_CS, либо функция жестко определяется, если используется опция компиляции для поддержки вывода в регистр.
И тут можно было бы обойтись без внесения изменений в менеджер, если бы не было необходимости устанавливать инверсию выходов.
Более того, если на ту же шину включить регистр вроде CD4021, то появляется возможность ввода низкоскоростных данных извне, схожим образом. Непосредственно посылку можно осуществлять (если не использовать опцию компиляции) только если сконфигурирован выход IOP_EXTERNAL_REGISTER_CS. Также, в принципе, ничего не мешает объединять два и более регистра в цепочку. Переназначение выводов на самом регистре делать не обязательно, можно жестко зафиксировать их.
Итого - изменений в коде сравнительно немного, а вот пользы - очень даже!
Что думает об этом уважаемое сообщество и непосредственно STC?
User avatar
STC
Posts: 13843
Joined: 30 Apr 2013, 23:41
Your CAR: AZLK 2140
SECU version: DIY SECU-3
Location: North Korea
Has thanked: 2160 times
Been thanked: 4335 times
Contact:

Re: Расширение кол-ва I/O портов.

Post by STC »

Идея хорошая, я уже над этим думал несколько раз. Окончательное решение приймем когда я начну рисовать схему блока "все в одном". Или ты предлагаешь подключать экспандер к плате SECU-3T?
Author of the SECU-3™ project http://SECU-3.org. An open source engine control unit / Ignition control system, (C) 2007.
Клуб проекта в Facebook https://www.facebook.com/groups/secu3club
Клуб проекта ВКонтакте https://vk.com/secu3club (вступаем!)
User avatar
mmlevin
Posts: 245
Joined: 13 May 2013, 09:44
Your CAR: I go on foot
SECU version: DIY SECU-3
Location: Россия, Воронеж
Has thanked: 2 times
Been thanked: 63 times

Re: Расширение кол-ва I/O портов.

Post by mmlevin »

Сейчас у меня в сборке 2 платы SECU-3T, китайцы все никак не пришлют несколько диодов. Я предлагал подключать экспандер (ну или регистр) к SECU-3T, этих плат у людей много :oops:. Переход на новую плату, чтобы получить функцию поддержки питания - это хорошо, но расточительно:) А маленький модуль в принципе выручил бы. А те, кто сразу собирается ставить инжектор, сразу бы ставили новую плату. По крайней мере стоит подумать об обратной совместимости расширителя с платой SECU-3T, но не думаю, что с этим будут какие-либо проблемы - SPI он и в Африке SPI.
User avatar
STC
Posts: 13843
Joined: 30 Apr 2013, 23:41
Your CAR: AZLK 2140
SECU version: DIY SECU-3
Location: North Korea
Has thanked: 2160 times
Been thanked: 4335 times
Contact:

Re: Расширение кол-ва I/O портов.

Post by STC »

Согласен. Тут главное чтобы релизация расширителя для SECU-3T и расширителя в новой плате были одинаковыми (чтобы не усложнять ПО).
Author of the SECU-3™ project http://SECU-3.org. An open source engine control unit / Ignition control system, (C) 2007.
Клуб проекта в Facebook https://www.facebook.com/groups/secu3club
Клуб проекта ВКонтакте https://vk.com/secu3club (вступаем!)
User avatar
mmlevin
Posts: 245
Joined: 13 May 2013, 09:44
Your CAR: I go on foot
SECU version: DIY SECU-3
Location: Россия, Воронеж
Has thanked: 2 times
Been thanked: 63 times

Re: Расширение кол-ва I/O портов.

Post by mmlevin »

Вывод - ждем появления решения в мастер-ветке (инжекторный блок) и бекпортируем в стабильную ветку (SECU-3T).
kordal
Posts: 19
Joined: 29 Jul 2013, 10:34
Your CAR: I go on foot
SECU version: DIY SECU-3
Has thanked: 3 times
Been thanked: 1 time
Contact:

Re: Расширение кол-ва I/O портов.

Post by kordal »

Доброго времени суток. А что, если использовать для расширения отдельную платку ретранслятор пакетов (мастер\ хост), связать с блоком по RS232 - 485 (422)? Т.е. сделать некий буфер, который цепляется на ноги RX TX, а он уже рулит разными устройствами по 485\422 (бортовой комп, противоугонные системы, системы расширения с разной логикой и пр.). Останется добавить несколько новых пакетов передачи данных. Единственным узким местом в такой системе, будет быстродействие. Хотя, скорее всего его хватит. Но есть и "+":
  • 1. Можно навешать много устройств.
    2. Относительно гибкая логика, блоки смогут общаться между собой.
    3. Опрашивать их по USB или иным образом.
    4. Можно конфигурировать из программы менеджер.
    5. Если задача стоит только считывать данные из главного блока, то переделка совсем не значительна.
Платка расширения ставится по аналогии с блютуз модулем в разрез RX\TX, кому не нужно дорожки остаются целыми.
Attachments
Block.JPG
Post Reply

Return to “Аппаратное обеспечение”