June 10th, 2021

Owl

Больше огарей!

Давненько их не выкладывал.

Вот буквально вчера вечером встретил сразу троих, сидели на соседних столбиках, разговаривали о чём-то своём:


А это сегодня, ещё и селезни впридачу:


Ну и ещё видео от начала мая, особенно бесстрашный пернатый, прям лоснится.
Collapse )

Ещё могу лебедей пофотать, они обитают в "Парке будущего" у метро Ботанический сад, там тоже проезжаю.
QuatCore

"МКО (Mil-Std1553) через UART", часть 0

Некая подготовительная работа, конечно, уже проведена, ровно для этого мы сделали 16-битные передатчик и приёмник UART: они не только удобнее согласуются с 16-битным процессором, отправляя по одному слову за раз, но и куда ближе к этому самому МКО (ГОСТ Р 52070-2003), не на физическом уровне конечно (там манчестерский код и безусловная гальваническая развязка через трансформатор), но на логических. А дальше просто "поменяю" приёмопередатчик, подключённый к ПЛИС, и будет мне счастье.

А то паять два устройства МКО, общающихся друг с другом как-то стрёмно: они вполне могут нормально заработать, обмениваться информацией, только это будет ни разу не МКО, а какой-то "свой диалект" :) Покупать на свои PCIную плату чего-то совсем не хочется, последний раз когда я спрашивал цену, озвучивали 66 000 рублей, и ещё не факт что физическому лицу продадут. Где-то на предприятии, может даже в отделе, должен лежать компьютер с установленной платкой МКО, но пока удобнее всё отлаживать "у себя", а за этот компьютер засесть, когда уже почти всё будет готово.

В штатном приборе приёмник МКО явно должен быть достаточно умным, чтобы хотя бы "отфильтровывать" все командные слова, адресованные "не нам". Уж больно их много: устройств сидит чуть ли не под завязку, 30 штук, и каждого по крайней мере 5 раз в секунду опрашивают, а то и побольше: отдельно выдача целевой информации и отдельно телеметрия. И если бы нам приходилось каждый раз отвлекать процессор на такую фигню, он бы точно запарывал каждый кадр изображения, там его отвлекать нельзя!

Я стал думать, насколько это легко, "отпарсить" весь поток информации и выделить адресованную "нам" и на некоторое время впал в полнейший ступор, как же нам слово данных от командного слова отличить?


Ведь в слове данных могут произвольные 16 бит лежать, чего бы им не совпасть с определённым командным словом? Получается, надо чётко прослеживать логику посылок, типа "вот сейчас была пауза, значит первое слово - командное, в нём было запрошено 32 слова данных (СД). Значит, сейчас отсчитываем 33 слова: сначала ответное, потом СД, а первое после них - это и будет следующее командное слово!" И всё бы хорошо, но стоит один раз ошибиться - и можно по "мусору" из слов данных очень долго строить соответствующие цепочки и отлавливать непонятно что. Чисто по паузам ориентироваться?

Потом вспомнил, где собака зарыта...

Collapse )

В общем, что-то начинает проглядываться. Вот думаю, может сделать-таки здесь DMA, причём приоритет всегда за процессором, а контроллер информационного обмена может и подождать пару тактов, всё-таки информационный обмен весьма нетороплив, одно слово за 20 мкс, это 500 тактов!

Была другая идейка, но возможно она слишком "толстая". Там пара модулей памяти воткнуты между процессором и этим контроллером. В первый модуль процессор может только записывать, в любое время, а контроллер может читать в любое время (память в ПЛИС двухпортовая). Второй модуль - всё наоборот, причём адреса "на запись" и "на чтение" по сути они делят. Например, процессор запишет по адресу "0" - тем самым передаст первое слово целевой информации. А прочитает по адресу "0" - получит первое слово полётного задания. Но с DMA можно сделать контроллер более "самостоятельным" - с дампом памяти он сам справится, не заставляя процессор чего-то готовить :)

Такие вот мысли вслух...