March 17th, 2017

worklog: binbanging to the rescue

Я пока не в состоянии побороть странное поведение конфигуратора I2C, поэтому воспользовался нечестным приёмом - драйвером i2c-gpio.
Привязал его к тем пинам, откуда всё торчит и.. хммм... что такое, вроде всё правильно, но осциллографом видно, что вместо нулевого уровня на месте бита ACK во всех посылках присутствует какой-то напополамный уровень - и не 0, и не 1, а посередине. Контроллер не чует ответа от периферийных устройств и фейлит все пробы. Сначала заподозревал буфер - сдул его феном, заново всё промерял: дефект остался.

Промерял подтягивающие резисторы - я ставлю 1.5 килоома обычно, но вдруг ошибся? Ткнулся мультиметром - нет, всё верно, полтора кила.

Дай, думаю, проверю ток, который нужен, чтобы притянуть пин к нулю - переключаю мультиметр в режим измерения тока, тыкаюсь в разъём и слегка прихуеваю от значения 53 мА.

Тут я начал подозревать уже другое.

В драйвере i2c-gpio есть биндинг, который типа нужен и обязателен - i2c-gpio,sda-open-drain; i2c-gpio,scl-open-drain;. Этой белибердой соответствующие пины переключаются в режим с открытым стоком.. по-идее. Но, судя по току, это нихера не так! Закомментировал их, перезалил - и, о чудо! Ногодрыгательная версия I2C завелась и зашуршала байтиками, а ток, необходимый для установления нулевого уровня, стал всего около 2 мА, каким он и должен быть. Работает это весьма медленно, но так всё равно лучше, чем вообще никак.

Похоже, тем же макаром придётся решать вопрос отсутствия драйверов для QSPI и SD/MMC (причём во втором случае драйвера нет даже в ядре мартовского релиза этого года - и будет ли оно когда-нибудь сделано, вообще непонятно). А вот с USB так уже не выкрутиться - да, есть решения даже для восьмибитных AVR, при помощи которых можно реализовать медленные девайсы (типа эмуляторов клавиатуры и т.п.), но это работает только при исключительном доступе к железу, чтобы точно выдерживать все тайминги -- в многозадачных системах это вряд ли возможно.

God Machine



На этом видео нет звука от работающих ракетных двигателей, что означает, что никаких американцев ни на какой Луне никогда не было.

worklog: заказал новые платы

Решил проверить идею о размещении смесителей прям рядом с формирователем управляющих импульсов (дабы снизить все пролазы до минимума - протяжённость самого звонкого участка - около 20 мм, фронты все специально подзавалены RC-фильтрами и длины цепей максимально уравнены для пущей балансировки), из-за чего потребовалось переделать несколько плат: выход синтезатора теперь обычный аналоговый 50 омный (DDS->фильтр->буфер на MMIC), а формирователь квадратурных импульсов переехал на одну плату вместе с двумя смесителями. Заодно на выходе смесов теперь не просто конденсаторы, а диплексеры (впрочем, просто конденсаторы впаять всё равно можно), дабы импеданс по входу был менее частотно-зависимым. Ну и ещё пробная версия фильтров для подчистки сигнала после смесителей: сейчас есть полосопропускающие, но у них верхний скат АЧХ слишком пологий и кратные гармошки они подавляют не очень хорошо. В новой версии будут ФНЧ с более крутым скатом. Можно будет сравнить, что лучше работает.

И ещё одну платку, чисто поржать - четырёхпортовый USB 2.0 хаб со встроенным USB-SATA мостом (т.е. на выход торчит три порта USB и один SATA).

На всё про всё, с учётом скидки, вышло примерно 1800 рублей. Это четыре типа плат по 10 штук каждых (так много потому, что сейчас цена на 5 и 10 одинаковая, а меньших градаций нет вовсе), т.е. 40 плат, в среднем, обошлись по 45 рублей каждая.

Что ж, это много?
Collapse )