2015-01-06 2 views
1

Я пытаюсь связаться с барометрическим сенсором MS5611, используя протокол I2C. Мое микро - это обнаружение STM32f3. Адрес датчика отправляется, но не команда. Код застревает в цикле while, ожидающем установки бита TXIE. Причина, по которой TXIE не является «одной», заключается в том, что бит подтверждения от MS5611 не отображается. Также в регистре состояния I2C устанавливается бит NACK (не подтвержден), бит STOPF (стоп-флаг).Сообщение I2C не дает мне бит ACK

Адрес датчика MS5611 - 11101100. Это можно увидеть в техническом описании на странице 12. В моем случае значение CSB равно нулю.

Datasheet MS5611

Но O-Scope показывает мне другую картину. Я попробовал это в обоих направлениях, но CSB-ноль в CSB один, но без успеха.

CSB нулю: O-scope picture 1

CSB один: где-то в моих комментариях :)

... Я не могу вставить картинку или ссылку, потому что у меня нет достаточного количества очков репутации: -/

Я так думал: Может быть, мое время отключено. Причина, по которой я думаю, связана с условием остановки, которое находится на 9-м SCL-пульсе. В этом месте бит ACK должен начинаться, а не бит STOP.

Итак, почему 9-й импульс высок? и кто дает 9-й импульс, микро или датчик?

номер издания уно: До сих пор, я попытался отправить команду чтения, с обеих комбинаций (11101101 или 11101111), изменены на другие устройства I2C. Этот контроллер имеет два модуля I2C (I2C1 и I2C2), изменил контакты (от PB6, PB7 до PA9 и PA10). Без успеха.

С другой стороны, я обратился к датчику acellometer mems на борту с теми же контактами (PB6, PB7) и тем же кодом. Единственным отличием были временные значения в регистре синхронизации I2C и адрес. Работал как шарм.

Мой вывод, очевидно, в том, что что-то не так с моими значениями времени или с протоколом I2C датчика. Однако я использовал пример настроек синхронизации в справочном руководстве по ST.

Итак, у меня нет другой альтернативы для перехода в режим отладчика и более глубокого изучения значений времени I2C.

Я был бы признателен за любую дополнительную информацию, и спасибо за помощь :)

+0

Какое напряжение находится на выводе CSB? –

+0

Что касается чтения с устройства, подтвердит ли он в этом случае? Попробуйте с помощью 11101101 или 11101111. –

ответ

0

Адрес датчика MS5611 является 11101100. Это можно увидеть в техническом описании на странице 12.В моем случае значение CSB равен нулю.

Значение адресного бита, соответствующего CSB, является его дополнением. Если CSB равно нулю, то значение, которое необходимо использовать для адресации записи, равно 11101110.

+0

Значение бит CSB зависит от напряжения на штыре. Я бы подождал подтверждения уровня напряжения. –

+0

@ Руслан Герасимов Он уже заявил в своем вопросе: «В моем случае значение CSB равно нулю». –

+0

Что заставляет вас думать, что он говорит о том, что он не немного? –

0

Учитывайте бит CSB отрицательным, поэтому, если вы заземлили контакт, это означает, что вы должны установить CBS как «1», как отметил Д. Д. Крюгер. Также вы можете попробовать прочитать с устройства, признает ли он в этом случае?Попробуйте с 11101101 или 11101111, зависит от бита CSB, но с (бит бит бит), read \ write bit = 1.

0

Похоже, что вы не получаете ack путем остановки (освобождения шины i2c), отправленной микроконтроллер на основе данных осциллографа.

Скорее всего, вы пытаетесь написать адрес, которого нет. Также в i2c имеется 7-битная адресация и 10 бит, однако 8-битная адресация отсутствует. 8-й бит используется для указания устройства, если он запрашивает чтение или запись. Дальше 9-й импульс высок, потому что он удерживался малым мастером при отправке последнего 0 (чтобы сигнализировать о записи), он может прекратить тянуть эту линию до тех пор, пока следующий такт. Сигнал для записи был отправлен на восходящие часы, он не может изменить данные на высоких тактовых импульсах (сигналы старт-остановки - это те), а затем, когда часы снова опускаются, теперь он может отпустить его, но обычно подчиненный должен вытащить данные с низким здесь, чтобы сигнализировать «да, я здесь», но там нет раба, и хозяин не должен контролировать его здесь, только устройство по этому адресу должно.

Вы отправили 1110:1100, который имеет наименьший значащий бит 0 и который является адресом записи 1110: 110. Никто не ответил.

+0

Также время не должно быть проблемой. Если устройство поддерживает быстрый режим i2c, он должен ответить в 2,5 микросекундах с помощью ack. Также, если это необходимо, он может заблокировать мастер, удерживая линию тактовой частоты, пока она не будет готова. Поэтому я должен сделать вывод, что устройство не настроено правильно или не принимает команды i2c в то время, которое вы запросили. –