Вообще не понимаю!

Nov 30, 2024 17:25

Как вот это могло работать? У STM32F103 и так I2C из рук вон дерьмовый, а тут еще и так вольно с ним обходятся.
Меж тем, глянул я, что за косяк: оказывается, чтобы считать регистр с определенным адресом (а не просто отправить запрос на чтение байта), после записи адреса регистра идет запрос состояния, и лишь потом - чтение байта! Подозреваю, что такого насилия датчик грозы, который я в качестве подопытного использую, не выдерживает. И когда так долго поджатый к нулю клок пытается опять выдать нечто, он не реагирует.
Не знаю, что там за задержка: возможностей осциллографа мне не хватает, а искать, куда я китайский клон saleae положил, мне лень.
Но уже и так понятно: "ядреный" модуль I2C в линуксе сделан максимально черезжопно. Он явно рассчитан не на работу с вменяемыми устройствами, например, через DMA или хотя бы напрямую, но без адовых пауз, а на работу с каким-нибудь говном, где I2C реализован тупым ногодрыгом и периферия не будет "брыкаться" из-за нарушения протокола.
Еще, наверное, чуть поковыряюсь, но таки сильно надеяться на то, что пробиться через эту стену тупизны мне удастся, не рассчитываю. Да и все равно подключить кучу всякой всячины проще на составном устройстве, а не выкидывать целый МК тупо ради посредника на I2C (тем паче, как я уже писал раньше, взял на алике "аппаратные" I2C-USB на потыкать палочкой).
Зато в битве с этим "tiny" у меня появилась очередная концепция, как красивше USB рисовать. Потренируюсь сначала на HID и PL2303: если получится сформировать базовое ядро, не зависящее от класса устройств, будет удобней. Ну и отдельно два сишных файлика: дескрипторы и сама железяка (обработка запросов class/vendor нулевой точки, а также работа со всеми остальными EP).

железяки, stm32

Previous post Next post
Up