ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
5 мая
1581591 Топик полностью
Nikolay_Po (15.04.2026 17:28, просмотров: 132) ответил Nikolay_Po на Один и тот же IP-блок I2C кочует по миру. В I2C CH32V006, похоже, такой же баг в аналоговом фильтре, какой был у STM32F1xx. Если на выводах I2C напряжение появляется раньше, чем питание, модуль зависает в BUSY и переходит в BUSY через пару мкс после сброса.
Продолжение. Примерно так и удалось побороть зависание, как описано выше. В автоматическом режиме, с DMA, работает. 

Из не очевидного, неожиданного: Передаю по шине. По описанию модуля, после отправки адреса, DMA делает остальное и прерывания не ожидается. Мой конечный автомат ждёт прерывания по завершению передачи - чтобы сделать СТОП. И логика ломается.

Оказалось: В регистр конфигурации адреса, я записал тот же адрес, которым вызываю ведомого при передаче. И, эта зараза, вызывает прерывание по совпадению переданного адреса со своим собственным, даже сама адрес и отправляет! Типа О! передан мой адрес! Лови прерывание!

Логика в этом есть. Только я теперь не пойму, зачем я ведущему, который пока ничего не принимает, прописал тот же адрес, что и у ведомого?


P.S. Не, оно выдаёт прерывание ADDR в любом случае, даже если отправленный адрес не совпадает с собственным. В случае использования TxDMA - лишнее прерывание... Предусмотрено отключение прерываний буфера данных (если работать с DMA они не нужны), но вот отключения адрес не предусмотрели, хотя было бы удобнее - неподтверждение адреса вылезло бы прерыванием acknowledge failure (AF) и этого было бы достаточно. А так - приходится входить и сбрасывать.