STM32 и альтернативная функция портов I2C

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Доброго времени суток. В общем то я проблему свою решил, но хотелось бы ее обсудить.

Есть STM32F103 и есть в том числе внешняя периферия сидящая на I2c в количестве 1шт (BMP180 на платке, со своим стабилизатором и подтягивающими R). Дорожки до датчика около 15мм длиной, на разных сторонах платы. Рядом ничего активного и шумящего нет.

Длинную историю как и чего делал рассказывать не буду. Сразу по существу.

В наличии есть три MК. Если порты I2C настроить на альтернативную функцию и только потом инициализировать I2C. Первый МК работает нормально, второй не захотел формировать событие старт (по краней мере не было этого флага), третий сначала работал некоторое время, но потом стал так же как второй. Однако если задеть пальцем, подпаять антенку-проводок на SDA или подсадить туда кондер на 1нф и землю все работало. Если встать осциллом, никаких плохих сигналов не видно, но и опять при наличии щупа на SDA все работает, а SCL на такое никак не реагировало. После всяких мытарств, многократного поиска где же я дурак, выяснилось что если сначала включить тактирование модуля I2C , уже потом включить альтернативную функцию портов и уже потом проводя настройку остального в I2C все проблемы на всех МК ушли).

Вопрос. Прописано ли где-то, что альтернативные функции должны включаться только после включения тактирования периферии? Относится ли это ко всем перифериям?
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Чем танцевать ритуальные танцы, выкачайте спецификацию на i2c, приведите схему в порядок рассчитав пуллапы исходя из длины шины, скорости и ёмкости. Определитесь с таймингами ,
Все рассчеты есть а RM.А так же обратите внимание на настройку скорости пинов.
Здесь для F4 http://mcu.goodboard.ru/viewtopic.php?id=14
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

Errata посмотрите. В МК есть несколько аппаратных ошибок модуля I2C.
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

dosikus писал(а):Определитесь с таймингами
С таймингами вроде как все просто и частота тактирововния получилась расчетная, проверял осциллом. Форма сигнала тоже как положено. Спад четкий, фронт нарастает менее 1мкс.
Мурик писал(а):Errata посмотрите.
В еррате действительно много текста про I2C, все время про этот документ забываю. Надо будет покурить его.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Эиком - электронные компоненты и радиодетали
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Терпеть ненавижу незаконченных тем, потому резюмирую, чтобы не путать честной народ.

Данный "глюк контроллера", являющийся по факту как всегда криворукостью, решался очередностью инициализации портов и IIC чисто случайно. Видимо чтобы по закону подлости еще более ввести в заблуждение.

На самом деле далее стали появляться другие грабли. Я долго и мужество сражался с мельницей :) :facepalm:. Дело в том что у меня два кода - загрузчик и основной. Я почему то решил, что указатель стека в обоих случаях будет стоять на вершине памяти, но компилятор со мной был не согласен и сделал совершенно разные значения, по причине ему ведомые. При передаче управления от одного кода другому корректировка указателя все решила. Так все банально, что аж стыдно :oops:
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

И на старуху бывает проруха...
Я обычно, при подобных заторах, создаю новый проект и стараюсь воспроизвести глюк в минимальном коде...
Реклама
Ответить

Вернуться в «ARM»