реклама на сайте
подробности

 
 
> STM32 Вопрос про I2C, непонимаю даташит или что-то не то
Vladimir Prokofi...
сообщение Aug 25 2011, 10:22
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 9-03-11
Пользователь №: 63 481



Пытаюсь послать два байта слейву по I2C:
1. Выставляем СТАРТ
2. Получаем в прерывании что старт прошел (Событие 5 ) I2C_EVENT_MASTER_MODE_SELECT:
Шлем 7битный адрес слейва по этому прерыванию
3. Получаем прерывание что отослан адрес. Игнорируем, так как должно сразу придти прерывание TxE
4. По прерыванию о пустоте буфера ( События 8 и 8_2 )
case I2C_EVENT_MASTER_BYTE_TRANSMITTING:
case I2C_EVENT_MASTER_BYTE_TRANSMITTED:
Если первый раз пришло, то шлем БАЙТ1.
Если второй раз пришло, то шлем БАЙТ2.
Если третий раз пришло то:


Вот тут хочется послать стоп. Но это прерывание пришло так как TxE = 1. Реально байт еще не ушел. Когда он уйдет, то, судя по эрате, должен выставиться битик BTF. Поэтому я считаю что его надо ждать. Я бы написал так:
Если третий раз пришло то:
Если BTF == 1 то шлем СТОП
Но этот бит не устанавливается. Прерывания приходят и приходят, БТФ = 0. Почему?


В принципе в эрате написано что СТОП следует выставлять когдв либо TxE = 1 либо BTF = 1;
Если я пошлю СТОП когда TxE = 1 а BTF = 0 то не получится ли так, что СТОП оборвет последний байт?

PS

И непонятно еще такая штука, у меня сложилось понимание, что:
когда срабатывает прерывание TxE, байт начинает слаться. Если ничего не кинуть в буфер, то прерывание не сбросится, и будет постоянно вызываться, пока не установится бит BTF?
Т.е. контроллер будет ждать пока уйдет последний байт в любом случае...


Сообщение отредактировал Vladimir Prokofiev - Aug 25 2011, 10:31
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
dfyz.s
сообщение Feb 13 2013, 06:34
Сообщение #2





Группа: Участник
Сообщений: 13
Регистрация: 10-01-11
Пользователь №: 62 132



Да, с схемотехнической точки зрения похоже все хорошо, т.к. один и2с без других прерываний работает нормально. Резисторы 5 КОм на обоих линиях, и2с на плате, длина линий очень небольшая.

Забежал к другу посмотреть на осциллографе, что происходит на шине.
Правильно ли я понимаю, что при попытке чтения из регистра нормально передается адрес устройства и адрес регистра , а после рестарта для чтения байта не приходит ответ от слейва?

Цитата
Вроде заработало, но, кажется, основная ошибка была совсем в другом...
Я посылал один пакет в след за другим сразу. Гипотеза, что слейв не успевал поймать старт после стопа. Может такое быть?
Поэтому он не подтверждал прием, срабатывало прерывание на ошибку. ошибка сбрасывалась, но что при этом с передачей происходит дальше я не знаю.
Поставил паузу перед отправкой. Но как то это стремно, контроллер тратит свеё время на ожидание...
Хотя меня тревожат сомненья что это не причина. Может просто условия изменились и пока ошибки не возникает...

Спасибо всем огромное, а особенно KnightIgor!!!
Кажись заработало! Тоже вставил такую задержку и стало работать!
Дома попробую с прерываниями.

С прерываниями работает на отлично!)

Сообщение отредактировал dfyz.s - Feb 13 2013, 18:24
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Vladimir Prokofiev   STM32 Вопрос про I2C   Aug 25 2011, 10:22
- - DmitryDI   Ну и как получилось завести I2C? Может есть вариан...   Aug 25 2011, 14:14
|- - Vladimir Prokofiev   Цитата(DmitryDI @ Aug 25 2011, 18:14) Ну ...   Aug 25 2011, 15:22
|- - KnightIgor   Цитата(Vladimir Prokofiev @ Aug 25 2011, 17...   Aug 29 2011, 08:59
|- - Vladimir Prokofiev   Цитата(KnightIgor @ Aug 29 2011, 12:59) I...   Aug 29 2011, 11:19
|- - KnightIgor   Цитата(Vladimir Prokofiev @ Aug 29 2011, 13...   Aug 29 2011, 12:15
|- - Vladimir Prokofiev   Большое спасибо! Скачал, пошел смотреть!   Aug 30 2011, 08:31
|- - Vladimir Prokofiev   Вроде заработало, но, кажется, основная ошибка был...   Aug 30 2011, 15:25
|- - KnightIgor   Цитата(Vladimir Prokofiev @ Aug 30 2011, 17...   Aug 30 2011, 16:49
|- - Vladimir Prokofiev   Уже считал что все получилось, но тут опять столкн...   Sep 15 2011, 10:47
- - dfyz.s   Здравствуйте! Сейчас разбираюсь с похожей проб...   Feb 5 2013, 18:28
|- - KnightIgor   Цитата(dfyz.s @ Feb 5 2013, 19:28) Сейчас...   Feb 5 2013, 21:41
- - dfyz.s   Большое спасибо за подробное описание! Не могл...   Feb 6 2013, 05:40
|- - KnightIgor   Цитата(dfyz.s @ Feb 6 2013, 06:40) Не мог...   Feb 6 2013, 12:05
|- - KnightIgor   Цитата(dfyz.s @ Feb 6 2013, 06:40) Большо...   Feb 6 2013, 20:20
- - dfyz.s   Да, какая то фигня с личными сообщениями, хотя в н...   Feb 8 2013, 17:10
- - polyname   Непонятно что они курили когда разрабатывали I2C ?...   Feb 8 2013, 17:47
- - dfyz.s   )))) Согласен. Но это не решает проблемы. Сейчас ...   Feb 8 2013, 18:04
|- - KnightIgor   Цитата(dfyz.s @ Feb 8 2013, 19:04) Сейчас...   Feb 8 2013, 20:25
- - dfyz.s   Игорь, большое спасибо за ваши обяснения! Мне...   Feb 10 2013, 19:31
|- - _Артём_   Цитата(dfyz.s @ Feb 10 2013, 21:31) отлад...   Feb 10 2013, 20:07
|- - KnightIgor   Цитата(dfyz.s @ Feb 10 2013, 20:31) Мне с...   Feb 11 2013, 11:02
- - dfyz.s   Да, скорее всего я где-то напортачил. Надо протест...   Feb 11 2013, 12:46
|- - KnightIgor   Цитата(dfyz.s @ Feb 11 2013, 13:46) Пробе...   Feb 12 2013, 08:39


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 21:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.01374 секунд с 7
ELECTRONIX ©2004-2016