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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Глюки с I2C
Allregia
сообщение Apr 29 2018, 14:12
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Глюк 1:

Мне тут нужно было в одном относительно старом проекте, который делался на 4-м Кейле, поменять некоторые дефолтные настройки. К I2C оно не относится, но глюк я поймал именно с I2C!
Сейчас на компе только 5-й, 4-го нет.
Проц - тот-же F103, к нему по I2C подключена 24LC16.

Запускаю под дебаггером (JLink-Lite подключен, причем настоящий) - ничего не работает, бне входя в деббагер (но с подключенный JLinkом) - все прекрасно работает.

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

WTF?!


Глюк 2:
это коллега тут возится с девайсом на STM32L452 и жалуется. Просил спросить:
Для тактирования используется MSI + PLL.
I2C настроен на 400кгц, тактируется от системного клока.

На одной плате, запускаешь под дебаггером - есть 400кгц. Включаешь ее без дебаггера - там около 40кгц.
Из 5-ти плат, так ведет себя одна, 4 другие в - вообще кто в лес, кто по дрова.
ТЕперь самое интересное - для проверки "на какой- частоте проц работате," вывели махание ножкой в систике - так там четко, 1мс.

Есть идеи?
Go to the top of the page
 
+Quote Post
HardEgor
сообщение Apr 29 2018, 15:19
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 223
Регистрация: 3-03-06
Из: Tomsk
Пользователь №: 14 925



Цитата(Allregia @ Apr 29 2018, 21:12) *
Есть идеи?

Каких идей вы хотите?
Если вы не можете пошагово пройти настройку тактовой частоты, то научить вас пользоваться дебаггером?
Go to the top of the page
 
+Quote Post
Allregia
сообщение Apr 29 2018, 17:24
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Цитата(HardEgor @ Apr 29 2018, 16:19) *
Каких идей вы хотите?


Например - почему работа одной и той-же прошивки, отличается под дебаггером и не под дебаггером Кейла?

Цитата
Если вы не можете пошагово пройти настройку тактовой частоты, то научить вас пользоваться дебаггером?


А что, от этого текст программы поменяется?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 29 2018, 17:36
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Allregia @ Apr 29 2018, 20:24) *
Например - почему работа одной и той-же прошивки, отличается под дебаггером и не под дебаггером Кейла?

Например, по причине отсутствия барьеров в нужных местах.
Go to the top of the page
 
+Quote Post
Allregia
сообщение Apr 29 2018, 18:17
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Цитата(aaarrr @ Apr 29 2018, 18:36) *
Например, по причине отсутствия барьеров в нужных местах.



Это для 1-го глюка или второго?

Если второго, то в тестовой программе ничего нет кроме систика, в котором мащется ножкой.
А в основной - просто чтение блока из I2C устройства.
Чтение едет правильно, только частота клока I2C на порядок ниже.
Как такое может быть - он же аппратно формируется. Не мжет же делитель зависеть от того, что проц под дебаггером запустили?

А с первым глком еще не понятнее - устройство не первой свежести, выпущено приличное количество, и никогда небыло никких проблем. А под дебаггером - связь с еепромкой не работает. Ну это ладно, я еще посмотрю, интереснее второй глюк - коллега там уже в ступроре полном.
Ну не ногодрыгом-же I2C делать! Хотя, в том режиме у него больше ничего не делается - проц периодически считывает блок по i2c, небольшая обраткока и отсылает в аурт. Так что, можно и ногодрыгом (на него я надеюсь, дебаггер никаки не повлияет!), в крайнем случае. Но непонятна причина.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 29 2018, 19:21
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Allregia @ Apr 29 2018, 21:17) *
Это для 1-го глюка или второго?

Да для обоих подойдет.

Цитата(Allregia @ Apr 29 2018, 21:17) *
Не мжет же делитель зависеть от того, что проц под дебаггером запустили?

Может, если его запись осуществляется некорректно.

Цитата(Allregia @ Apr 29 2018, 21:17) *
Ну не ногодрыгом-же I2C делать!

Только так и делаю. У меня нет ни времени ни желания искать обходы для 100500 аппаратных
глюков модулей I2C на дюжине используемых платформ. Софтовый же абсолютно надежен
и предсказуем, там не приходится ждать приколов типа "мы не поддерживаем clock stretching
и repeated start". Все вышесказанное, разумеется, относится к режиму master.

Единственный приличный аппаратный контроллер I2C, который я встречал, использовался в
мелких AVR типа ATmega48 и процессорах LPC13xx (автор один). Вот там можно было смело
полагаться на железо.
Go to the top of the page
 
+Quote Post
serglg
сообщение Apr 30 2018, 04:23
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 146
Регистрация: 19-07-16
Пользователь №: 92 603



Цитата(aaarrr @ Apr 30 2018, 01:21) *
Да для обоих подойдет.

Только так и делаю. У меня нет ни времени ни желания искать обходы для 100500 аппаратных
глюков модулей I2C на дюжине используемых платформ. Софтовый же абсолютно надежен
и предсказуем, там не приходится ждать приколов типа "мы не поддерживаем clock stretching
и repeated start". Все вышесказанное, разумеется, относится к режиму master.

Единственный приличный аппаратный контроллер I2C, который я встречал, использовался в
мелких AVR типа ATmega48 и процессорах LPC13xx (автор один). Вот там можно было смело
полагаться на железо.


Забавно. :-)
А я столько лет переживал, что в 8-битнике Z8Encore всегда использовал софтовый I2C. Хотя там уже 15 лет как был аппаратный (начинал я еще в 1995, когда его не было). Я всё никак не мог разобраться там с мудреными регистрами и тупо дергал двумя ножками. Там всё понятно.
И вот достиг наконец в STM32 аппаратного. Рад был до безумия. Всё прекрасно уже 3-й год. И вдруг оказывается там могут быть проблемы. :-(

Кстати, проблем нет у меня ни в STM32L476, ни STM32F446. Ни под дебаггером Кейла 5, ни потом в работе.
Но! В последней версии HAL 1.11 для STM32L476 какой-то глюк - вообще память по I2C не работает.


Цитата(Allregia @ Apr 29 2018, 20:12) *
это коллега тут возится с девайсом на STM32L452 и жалуется. Просил спросить:
Для тактирования используется MSI + PLL.
I2C настроен на 400кгц, тактируется от системного клока.

На одной плате, запускаешь под дебаггером - есть 400кгц. Включаешь ее без дебаггера - там около 40кгц.
Из 5-ти плат, так ведет себя одна, 4 другие в - вообще кто в лес, кто по дрова.
ТЕперь самое интересное - для проверки "на какой- частоте проц работате," вывели махание ножкой в систике - так там четко, 1мс.

Есть идеи?


Если у него HAL и версия STM32Cube_FW_L4_V1.11.1, то может быть что угодно. :-)
А вот STM32Cube_FW_L4_V1.8.1 - всё нормально.
У мня для STM32L476 тактирование как раз MSI + PLL.


Сообщение отредактировал serglg - Apr 30 2018, 04:24
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 30 2018, 04:33
Сообщение #8


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Сделал работу i2c для некоего мелкого STM32 (конкретно, сейчас не промню, но проект имеется, естественно) - аппаратно, как положено. Над битами, временными диаграммами пришлось помедитировать и все. Повезло?
P. S. HAL-ами не пользуюсь.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 30 2018, 05:22
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(aaarrr @ Apr 29 2018, 22:21) *
Только так и делаю. У меня нет ни времени ни желания искать обходы для 100500 аппаратных
глюков модулей I2C на дюжине используемых платформ.

А другие интерфейсы (UART, SPI, ...) на этой дюжине тоже ногодрыгом реализуете? smile3046.gif
В чём разница между I2C и каким-то другим последовательным интерфейсом?

Цитата(aaarrr @ Apr 29 2018, 22:21) *
Софтовый же абсолютно надежен и предсказуем,

мрак.... ногодрыг в наше время на современных МК на вдоль и поперёк изъезженном I2C???... полный мрак... smile3009.gif
Писал драйвера I2C на LPC23xx, LPC17xx, OMAP-L137, STM32F4, XMC4500, MSP430 - везде использовал встроенный I2C-контроллер, кое-где - с DMA, кое-где - на шине висела гроздь устройств. Коллеги писали на Tiva TM4C129 - тоже аппаратно.
Ни разу не возникло необходимости или желания заниматься ногодрыгом.
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Apr 30 2018, 07:40
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



Да ни при чем тут барьеры... Не надо никаких программных ногодрыгов, пожалуйста. Да, согласен, что аппаратный I2C в STM32- та еще задача нормально поднять, хотя хватает полдня чтобы по документации написать хороший драйвер с обработкой ошибок и DMA... Но это все лирика rolleyes.gif

Касательно проблемы автора: под дебаггером закройте окошко отладочное с регистрами I2C-модулей, приятно удивитесь.
Go to the top of the page
 
+Quote Post
Allregia
сообщение Apr 30 2018, 07:44
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Цитата(Arlleex @ Apr 30 2018, 08:40) *
Касательно проблемы автора: под дебаггером закройте окошко отладочное с регистрами I2C-модулей, приятно удивитесь.


А их никто и не открывал.
про проблему сброса статусны битов когда дебаггер читает регистры - я в курсе.

К тому-же - в "Глюке #2" все еще чудесатее, т.к. из 4-х плат только в одной без дебаггера частота клока I2C соответствует заданной, а в 4-х платах - нет.
Прошивка, разумеется. одна и та-же. Тутеже дело не в дебаггере.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 30 2018, 08:04
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Allregia @ Apr 30 2018, 10:44) *
К тому-же - в "Глюке #2" все еще чудесатее, т.к. из 4-х плат только в одной без дебаггера частота клока I2C соответствует заданной, а в 4-х платах - нет.

Ну так выведите значения всех регистров, от коих эта частота зависит, в отладочный UART (или другой удобный интерфейс). И увидите что не так. В чём проблема?
PS: Вопрос вроде не в ветке "Для чайников".....
Go to the top of the page
 
+Quote Post
HardEgor
сообщение Apr 30 2018, 10:33
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 223
Регистрация: 3-03-06
Из: Tomsk
Пользователь №: 14 925



Цитата(Allregia @ Apr 30 2018, 00:24) *
А что, от этого текст программы поменяется?

Так откуда же я знаю что у вас там в программе и процессоре происходит?
Тут один студент несколько дней отлаживал программу в дебаггере - не мог получить правильную частоту в логическом анализаторе Keil. Оказалось дебажил в симуляторе....

Пошагово пройдите настройку процессора, смотрите правильно ли выставлены регистры RCC и I2C и т.д.
Выведите частоту на MCO, посмотрите осциллографом.
А у вас точно I2C? может SMBus?

Цитата(jcxz @ Apr 30 2018, 15:04) *
Ну так выведите значения всех регистров, от коих эта частота зависит, в отладочный UART (или другой удобный интерфейс). И увидите что не так. В чём проблема?

ТС отказывается учиться работать в дебаггере sm.gif И ничего полезного не говорит sad.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 30 2018, 10:47
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(jcxz @ Apr 30 2018, 08:22) *
А другие интерфейсы (UART, SPI, ...) на этой дюжине тоже ногодрыгом реализуете? smile3046.gif

Нет.

Цитата(jcxz @ Apr 30 2018, 08:22) *
В чём разница между I2C и каким-то другим последовательным интерфейсом?

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

Цитата(jcxz @ Apr 30 2018, 08:22) *
мрак.... ногодрыг в наше время на современных МК на вдоль и поперёк изъезженном I2C???... полный мрак... smile3009.gif

Эмоции, вижу, просто зашкаливают biggrin.gif
Go to the top of the page
 
+Quote Post
Allregia
сообщение Apr 30 2018, 11:01
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Цитата(HardEgor @ Apr 30 2018, 11:33) *
Так откуда же я знаю что у вас там в программе и процессоре происходит?


В том-то и дело, что болше ничгео не происходит - сделан был тестовый проект, в котором кроме i2c больше ничего нет.

Цитата
Тут один студент несколько дней отлаживал программу в дебаггере - не мог получить правильную частоту в логическом анализаторе Keil. Оказалось дебажил в симуляторе....


Коллеге, который с этим возится, скоро 60, совсем не студент sm.gif
Хотя, я больше чем уверен, что где-то какая-то "детская ошибка" сидит.


Цитата
Пошагово пройдите настройку процессора, смотрите правильно ли выставлены регистры RCC и I2C и т.д.
Выведите частоту на MCO, посмотрите осциллографом.
А у вас точно I2C? может SMBus?

Нет.
А для проверки частоты использовалось махание ножкой в систике.

Цитата
ТС отказывается учиться работать в дебаггере sm.gif И ничего полезного не говорит sad.gif


Если Вы не заметили, это вообще не у меня а у коллеги.
У меня - "глюк 1", но я с ним пока больше не возился.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 4th July 2025 - 17:14
Рейтинг@Mail.ru


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