R2AIV 0 13 марта, 2019 Опубликовано 13 марта, 2019 · Жалоба Здраствуйте! Имеем: отладочная плата с МК 1343 от Олимекса, гироскоп/акселлерометр MPU6050 и нужду все это заставить работать. Не могу понять, как заставить работать I2C. По сути - передается только старт-состояние (один такт, даже на SCL) - далее ничего не происходит. Непонятно, каким образом дать контроллеру отмашку, что надо передать данные, находящиеся в регистре DAТ. После передачи старта в регистре состояния имеем 0x08, то говорит о том, что старт передан. На любые другие действия в регистре состояния - 0xF8 (нет информации о состоянии). Понимаю, что нужно отработать некий алгоритм, но не до конца ясно какой. В каких случаях необходимо снимать флаг прерывания? Киньте плиз примером, или какой-нибудь инфой об последовательности действий. User Manual читал, не помогло ((( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 13 марта, 2019 Опубликовано 13 марта, 2019 · Жалоба На всякий случай: у вас подтягивающие резисторы установлены? На обе линии? Контроллер I2C в NXPшных МК довольно внятно описан. Там же есть описание всех состояний, и что делать после каждого из них. Опять же код примера на работе, завтра, если не забуду смогу запостить сюда. Но примерно нужно следующее сделать: START; адрес микросхемы с флагом R/W; далее команда на запись и данные; либо/или RESTART; команда на чтение, данные, вычитанные с микросхемы; STOP. Также от микросхемы нужно принимать ACK/NACK при записи и давать ей их при чтении. 1 hour ago, R2AIV said: что надо передать данные, находящиеся в регистре DAТ. А размер данных (сколько байт передать) вы прописали? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 13 марта, 2019 Опубликовано 13 марта, 2019 · Жалоба 1 hour ago, R2AIV said: далее ничего не происходит Далее должен передаваться адрес, потом данные. I2ADDRx содержат адрес вашей MPU6050? 1 hour ago, R2AIV said: User Manual читал, не помогло ((( Слушайте, я думал там действительно что-то кастрировали))) Скачал мануал, пробежался. Там всё подробно описано. Как и в других МК. Всегда по этим описаниям делали драйвера, и всё работало. Шина наипростейшая, проверяйте, все ли данные заполнили, и оно заработает))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
R2AIV 0 13 марта, 2019 Опубликовано 13 марта, 2019 · Жалоба Да я вот и склоняюсь больше в ту сторону, что я где-то туплю. А где размер данных передавать и куда адрес прописывать? Я вручную работаю с МК, на уровне реигистров. Соответственно передача и прием побайтные ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 13 марта, 2019 Опубликовано 13 марта, 2019 · Жалоба 6 minutes ago, R2AIV said: куда адрес прописывать? Я вам написал название регистра. Их там несколько, надо прочитать и понять, почему их несколько. 6 minutes ago, R2AIV said: А где размер данных передавать Нигде) Я подзабыл) Вы просто пишете в регистр DAT данные, пока они у вас есть, либо читаете, сколько нужно. Потому либо RESTART, либо STOP. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
R2AIV 0 14 марта, 2019 Опубликовано 14 марта, 2019 · Жалоба А ларчик просто открывался. Я запускался из под отладчика, в результати, из-за тормозов отладчика сыпалась работа автомата i2c. Подцепил логический анализатор и отлаживаюсь по нему. Возникла другая проблема. Работаю с датчиком MPU6050. Чтение из устройства выглядит так: старт->адрес датчика+запись->адрес регистра в датчике->повстарт->адрес датчика+чтение->датчик выдает байт->ACK не выдаем (читаем по одному байту)->стоп. Проблема в том, что контроллер не выдает повстарт. Т.е. я делаю LPC_I2C->CONSET = I2C_START, жду появления флага прерывания - и ничего не происходит. Точней, прерывание происходит, но на линиях повстарт состояния нет. А следом за этим как ни в чем не бывало идет передача данных, но т.к. датчик не увидел состояния повстарт - выдаем адрес "вхолостую". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 14 марта, 2019 Опубликовано 14 марта, 2019 · Жалоба 41 minutes ago, R2AIV said: из-за тормозов отладчика сыпалась работа автомата i2c Что за отладчик? Никогда такого не наблюдал у себя. Мои драйвера шин работают ещё и под ОС, и Ethernet есть, и прерывания каждые 50 мкс... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
R2AIV 0 14 марта, 2019 Опубликовано 14 марта, 2019 · Жалоба ULINK2. Комп старый, грешу на то, что там USB 1.1 подтупливает. Потому что при запуске отладки все становится мееееедленно. Проблема решена, оказывается датчик просто слал нули, которые я принимал за подтягивание SDA к земле самим 1343. В итоге все запустилось и полетело, спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 14 марта, 2019 Опубликовано 14 марта, 2019 · Жалоба 13 minutes ago, R2AIV said: В итоге все запустилось и полетело, спасибо! Я рад, что у вас всё получилолсь! Доброго полёта! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
R2AIV 0 14 марта, 2019 Опубликовано 14 марта, 2019 · Жалоба Спасибо за пожелание! По иронии судьбы, речь идет как раз об авиации )) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 15 марта, 2019 Опубликовано 15 марта, 2019 · Жалоба 5 hours ago, R2AIV said: По иронии судьбы, речь идет как раз об авиации )) Тогда сделайте, пожалуйста, хорошо, чтобы мы не боялись летать) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться