Перейти к содержанию

    

LPC1343 не могу запустить I2C

Здраствуйте! Имеем: отладочная плата с МК 1343 от Олимекса, гироскоп/акселлерометр MPU6050 и нужду все это заставить работать. Не могу понять, как заставить работать I2C. По сути - передается только старт-состояние (один такт, даже на SCL) - далее ничего не происходит. Непонятно, каким образом дать контроллеру отмашку, что надо передать данные, находящиеся в регистре DAТ. После передачи старта в регистре состояния имеем 0x08, то говорит о том, что старт передан. На любые другие действия в регистре состояния - 0xF8 (нет информации о состоянии). Понимаю, что нужно отработать некий алгоритм, но не до конца ясно какой. В каких случаях необходимо снимать флаг прерывания? Киньте плиз примером, или какой-нибудь инфой об последовательности действий. User Manual читал, не помогло (((

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На всякий случай: у вас подтягивающие резисторы установлены? На обе линии?

Контроллер I2C в NXPшных МК довольно внятно описан. Там же есть описание всех состояний, и что делать после каждого из них. Опять же код примера на работе, завтра, если не забуду смогу запостить сюда.

Но примерно нужно следующее сделать: START; адрес микросхемы с флагом R/W; далее команда на запись и данные; либо/или RESTART; команда на чтение, данные, вычитанные с микросхемы; STOP. Также от микросхемы нужно принимать ACK/NACK при записи и давать ей их при чтении.

1 hour ago, R2AIV said:

что надо передать данные, находящиеся в регистре DAТ.

А размер данных (сколько байт передать) вы прописали?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 hour ago, R2AIV said:

далее ничего не происходит

Далее должен передаваться адрес, потом данные.

I2ADDRx содержат адрес вашей MPU6050?

1 hour ago, R2AIV said:

User Manual читал, не помогло (((

Слушайте, я думал там действительно что-то кастрировали))) Скачал мануал, пробежался. Там всё подробно описано. Как и в других МК. Всегда по этим описаниям делали драйвера, и всё работало. Шина наипростейшая, проверяйте, все ли данные заполнили, и оно заработает)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да я вот и склоняюсь больше в ту сторону, что я где-то туплю. А где размер данных передавать и куда адрес прописывать? Я вручную работаю с МК, на уровне реигистров. Соответственно передача и прием побайтные )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
6 minutes ago, R2AIV said:

куда адрес прописывать?

Я вам написал название регистра. Их там несколько, надо прочитать и понять, почему их несколько.

6 minutes ago, R2AIV said:

А где размер данных передавать

Нигде) Я подзабыл) Вы просто пишете в регистр DAT данные, пока они у вас есть, либо читаете, сколько нужно. Потому либо RESTART, либо STOP.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А ларчик просто открывался. Я запускался из под отладчика, в результати, из-за тормозов отладчика сыпалась работа автомата i2c. Подцепил логический анализатор и отлаживаюсь по нему. Возникла другая проблема. Работаю с датчиком MPU6050. Чтение из устройства выглядит так: старт->адрес датчика+запись->адрес регистра в датчике->повстарт->адрес датчика+чтение->датчик выдает байт->ACK не выдаем (читаем по одному байту)->стоп. Проблема в том, что контроллер не выдает повстарт. Т.е. я делаю LPC_I2C->CONSET = I2C_START, жду появления флага прерывания - и ничего не происходит. Точней, прерывание происходит, но на линиях повстарт состояния нет. А следом за этим как ни в чем не бывало идет передача данных, но т.к. датчик не увидел состояния повстарт - выдаем адрес "вхолостую".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
41 minutes ago, R2AIV said:

из-за тормозов отладчика сыпалась работа автомата i2c

Что за отладчик? Никогда такого не наблюдал у себя. Мои драйвера шин работают ещё и под ОС, и Ethernet есть, и прерывания каждые 50 мкс...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ULINK2. Комп старый, грешу на то, что там USB 1.1 подтупливает. Потому что при запуске отладки все становится мееееедленно. Проблема решена, оказывается датчик просто слал нули, которые я принимал за подтягивание SDA к земле самим 1343. В итоге все запустилось и полетело, спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
13 minutes ago, R2AIV said:

В итоге все запустилось и полетело, спасибо!

Я рад, что у вас всё получилолсь! Доброго полёта!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за пожелание! По иронии судьбы, речь идет как раз об авиации ))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
5 hours ago, R2AIV said:

По иронии судьбы, речь идет как раз об авиации ))

Тогда сделайте, пожалуйста, хорошо, чтобы мы не боялись летать)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти