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

Глюк 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мс.

 

Есть идеи?

Изменено пользователем haker_fox
Переименовал тему в более понятную. Переместил в раздел STM32.

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


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

Есть идеи?

Каких идей вы хотите?

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

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


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

Каких идей вы хотите?

 

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

 

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

 

А что, от этого текст программы поменяется?

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


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

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

Например, по причине отсутствия барьеров в нужных местах.

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


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

Например, по причине отсутствия барьеров в нужных местах.

 

 

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

 

Если второго, то в тестовой программе ничего нет кроме систика, в котором мащется ножкой.

А в основной - просто чтение блока из I2C устройства.

Чтение едет правильно, только частота клока I2C на порядок ниже.

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

 

А с первым глком еще не понятнее - устройство не первой свежести, выпущено приличное количество, и никогда небыло никких проблем. А под дебаггером - связь с еепромкой не работает. Ну это ладно, я еще посмотрю, интереснее второй глюк - коллега там уже в ступроре полном.

Ну не ногодрыгом-же I2C делать! Хотя, в том режиме у него больше ничего не делается - проц периодически считывает блок по i2c, небольшая обраткока и отсылает в аурт. Так что, можно и ногодрыгом (на него я надеюсь, дебаггер никаки не повлияет!), в крайнем случае. Но непонятна причина.

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


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

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

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

 

Не мжет же делитель зависеть от того, что проц под дебаггером запустили?

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

 

Ну не ногодрыгом-же I2C делать!

Только так и делаю. У меня нет ни времени ни желания искать обходы для 100500 аппаратных

глюков модулей I2C на дюжине используемых платформ. Софтовый же абсолютно надежен

и предсказуем, там не приходится ждать приколов типа "мы не поддерживаем clock stretching

и repeated start". Все вышесказанное, разумеется, относится к режиму master.

 

Единственный приличный аппаратный контроллер I2C, который я встречал, использовался в

мелких AVR типа ATmega48 и процессорах LPC13xx (автор один). Вот там можно было смело

полагаться на железо.

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


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

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

 

Только так и делаю. У меня нет ни времени ни желания искать обходы для 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 не работает.

 

 

это коллега тут возится с девайсом на 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

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


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

Сделал работу i2c для некоего мелкого STM32 (конкретно, сейчас не промню, но проект имеется, естественно) - аппаратно, как положено. Над битами, временными диаграммами пришлось помедитировать и все. Повезло?

P. S. HAL-ами не пользуюсь.

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


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

Только так и делаю. У меня нет ни времени ни желания искать обходы для 100500 аппаратных

глюков модулей I2C на дюжине используемых платформ.

А другие интерфейсы (UART, SPI, ...) на этой дюжине тоже ногодрыгом реализуете? :smile3046:

В чём разница между I2C и каким-то другим последовательным интерфейсом?

 

Софтовый же абсолютно надежен и предсказуем,

мрак.... ногодрыг в наше время на современных МК на вдоль и поперёк изъезженном I2C???... полный мрак... :smile3009:

Писал драйвера I2C на LPC23xx, LPC17xx, OMAP-L137, STM32F4, XMC4500, MSP430 - везде использовал встроенный I2C-контроллер, кое-где - с DMA, кое-где - на шине висела гроздь устройств. Коллеги писали на Tiva TM4C129 - тоже аппаратно.

Ни разу не возникло необходимости или желания заниматься ногодрыгом.

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


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

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

 

Касательно проблемы автора: под дебаггером закройте окошко отладочное с регистрами I2C-модулей, приятно удивитесь.

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


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

Касательно проблемы автора: под дебаггером закройте окошко отладочное с регистрами I2C-модулей, приятно удивитесь.

 

А их никто и не открывал.

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

 

К тому-же - в "Глюке #2" все еще чудесатее, т.к. из 4-х плат только в одной без дебаггера частота клока I2C соответствует заданной, а в 4-х платах - нет.

Прошивка, разумеется. одна и та-же. Тутеже дело не в дебаггере.

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


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

К тому-же - в "Глюке #2" все еще чудесатее, т.к. из 4-х плат только в одной без дебаггера частота клока I2C соответствует заданной, а в 4-х платах - нет.

Ну так выведите значения всех регистров, от коих эта частота зависит, в отладочный UART (или другой удобный интерфейс). И увидите что не так. В чём проблема?

PS: Вопрос вроде не в ветке "Для чайников".....

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


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

А что, от этого текст программы поменяется?

Так откуда же я знаю что у вас там в программе и процессоре происходит?

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

 

Пошагово пройдите настройку процессора, смотрите правильно ли выставлены регистры RCC и I2C и т.д.

Выведите частоту на MCO, посмотрите осциллографом.

А у вас точно I2C? может SMBus?

 

Ну так выведите значения всех регистров, от коих эта частота зависит, в отладочный UART (или другой удобный интерфейс). И увидите что не так. В чём проблема?

ТС отказывается учиться работать в дебаггере :) И ничего полезного не говорит :(

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


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

А другие интерфейсы (UART, SPI, ...) на этой дюжине тоже ногодрыгом реализуете? :smile3046:

Нет.

 

В чём разница между I2C и каким-то другим последовательным интерфейсом?

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

записи незначительного количества информации.

 

мрак.... ногодрыг в наше время на современных МК на вдоль и поперёк изъезженном I2C???... полный мрак... :smile3009:

Эмоции, вижу, просто зашкаливают :biggrin:

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


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

Так откуда же я знаю что у вас там в программе и процессоре происходит?

 

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

 

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

 

Коллеге, который с этим возится, скоро 60, совсем не студент :)

Хотя, я больше чем уверен, что где-то какая-то "детская ошибка" сидит.

 

 

Пошагово пройдите настройку процессора, смотрите правильно ли выставлены регистры RCC и I2C и т.д.

Выведите частоту на MCO, посмотрите осциллографом.

А у вас точно I2C? может SMBus?

Нет.

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

 

ТС отказывается учиться работать в дебаггере :) И ничего полезного не говорит :(

 

Если Вы не заметили, это вообще не у меня а у коллеги.

У меня - "глюк 1", но я с ним пока больше не возился.

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


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

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...