Архив за месяц: Ноябрь 2014

Починка автомобильного диагноста

Довелось как-то посмотреть на такой девайс изнутри. К сожалению, не догадался отснять процесс ремонта.

Автомобильный диагност Dearborn

Принесли его мне с симптомами, что устройство не видно компьютером и вроде как кто-то умудрился подключить к нему кабель USB B перевернув на 180 градусов.

Первыми мыслями были про выгоревший регулятор питания или предохранитель. Открыв корпус, однако, ни явно сгоревших деталей, ни постороннего запаха я не обнаружил. Проследил на сколько мог цепи питания и не нашёл предохранителя, зато сразу же обнаружился LDO регулятор, переводивший 5В в 3.3. Самым странным оказалось, что с помощью мультиметра не смог прозвонить цепь питания от USB разьёма до входа регулятора. Дорога после феррита просто ныряла через переходное отверстие в глубинные слои платы и больше нигде не прозванивалась. Ничего похожего на предохранитель или защитный диод или транзистор я так и не смог где-либо найти.

Подключение питания давало появление 5В в начале цепи вплоть до переходного отверстия. Дальше видно было только пару десятков милливольт. Не обнаружив никаких замыканий, в том числе в регуляторе, я соединил куском медного провода переходное отверстие, после всех фильтров питания, со входом LDO регулятора. И девайс ожил. Светодиоды загорелись и по очереди моргнули, винда нашла новое устройство и стала устанавливать к нему драйвер.

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

Таким образом, я сделал вывод, что где-то во внутреннем слое не выдержала дорога питания или переходное отверстие, в результате КЗ, которое случилось, когда кабель USB был подключен в неправильном положении и питание подавалось на схему в обратной полярности. Аккуратно кинул провод от переходного отверстия ко второй части цепи питания, убедился, что нигде ничего не греется, собрал прибор и вернул его владельцу.

Подключаем 16-клавишный тачпад на базе TTP229 к микроконтроллеру

Недавно получил, заказанные с eBay, тачпад с 16 клавишами, на базе чипа TTP229.

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

С этой информацией уже можно было работать. Я отследил какие дороги, как подключены к выводам чипа и узнал его распиновку и конфигурацию. Оказалось, что по умолчанию схема настроена на работу только с первой группой из 8 клавиш. Допаяв на плату отсутствовавшие разьёмы-гребёнки, я получил возможность с помощью перемычек менять настройки.

Всего с двумя дополнительными перемычками заработали все 16 клавиш, и кроме того поменялся режим выхода с активного низкого, на активный высокий. Для быстрого тестирования и демонстрации принципов работы с модулем, набросал простенький скетч для Arduino, который можно найти в моём репозитории на GitHub https://github.com/dmmedia/TTP229B_16keypad. Загрузив скетч и подключившись к Arduino через SerialMonitor, можно наблюдать события нажатия и отпускания или смены кнопок.

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

И снова эскейпим SQL

Бесконечное количество раз уже упоминалось в интернете о том, что все строковые параметры, особенно те, что приходят от пользователя, не только желательно, но и даже обязательно нужно экранировать при использовании в SQL запросах.

Однако снова и снова открываешь какой-нибудь энтерпрайз проект и видишь что то наподобие этого:
CString sql = "SELECT * FROM categories WHERE category = '" + category + "'";
где category никем не проверяемая и неэкранированная переменная, которую создают прямиком из введённых пользователем данных.

Ведь практически каждая современная СУБД позволяет через свой API либо автоматически, во время подготовки запроса(prepared statements), либо в ручную, вызвав спец. метод экранировать такие строки. Но нет, кто-то продолжает писать код на коленке, когда надо по быстрому сдать проект. По моему надо учить обработке пользовательских данных буквально на любом курсе программирования, что бы потом это было на уровне рефлексов. А не так как сейчас, где некоторые темы на курсах совсем не затрагиваются или обращается мало внимания на качество кода.