Собрал i2c bootloader и написал uploader для него.
Bootloader из OpenServo, но только он не ждет 5 секунд, а проверяет соединены ли MISO и MOSI перемычкой.
Интерфейс у него очень прост: Во фрейме записи устанавливается адрес (2-а байта) буфера r/w, если далее идут данные, то они будут записаны по указанному адресу. В фрейме чтения идет чтение буфера r/w. Адрес до 0x2000 — flash, после — EEPROM, бут защищен от перезаписи. Спец. адрес 0xffff — старт прошивки. Бут занимает 512 слов, стартовый адрес 0x1c00.
Сейчас читает все датчики, но пока нет калибровки и положения линии. Но пока не отловил глюк — если все датчики над отражающей поверхностью — начинает мусор писать, сбои чтения. Если хоть один датчик не принимает — все нормально.
Кстати посмотрев осциллограмму уменьшил задержку на зарядку до 5 мс (было 10) и думаю вообще можно сократить до 2-х.
Еще один баг — адрес i2c меняется только посте ресета, онлайном не хочет.
Много времени убил на отлов просадки питания. Дроссель заменил на BLM (FB) и все нормально. До этого думал что у меня программный баг, посмотреть питание не догадывался.
Vooon писал(а):До этого думал что у меня программный баг, посмотреть питание не догадывался.
Да у вас там аппаратный баг... даже не баг, а схемотехническая ошибка. причем дурная. Представьте, я свечу лампой в морду фототранзистору. Фототранзистор замыкает коллектор на землю, и тут вы пытаетесь ногой проца поднять этот коллектор с земли...
Кто сильнее открытый фототранзистор или нога проца? разрядится ли кондер в такой ситуации? Ничего ли не сгорит? Я не знаю.