Allregia 9 29 апреля, 2018 Опубликовано 29 апреля, 2018 (изменено) · Жалоба Глюк 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мс. Есть идеи? Изменено 15 ноября, 2022 пользователем haker_fox Переименовал тему в более понятную. Переместил в раздел STM32. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardEgor 76 29 апреля, 2018 Опубликовано 29 апреля, 2018 · Жалоба Есть идеи? Каких идей вы хотите? Если вы не можете пошагово пройти настройку тактовой частоты, то научить вас пользоваться дебаггером? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 29 апреля, 2018 Опубликовано 29 апреля, 2018 · Жалоба Каких идей вы хотите? Например - почему работа одной и той-же прошивки, отличается под дебаггером и не под дебаггером Кейла? Если вы не можете пошагово пройти настройку тактовой частоты, то научить вас пользоваться дебаггером? А что, от этого текст программы поменяется? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 29 апреля, 2018 Опубликовано 29 апреля, 2018 · Жалоба Например - почему работа одной и той-же прошивки, отличается под дебаггером и не под дебаггером Кейла? Например, по причине отсутствия барьеров в нужных местах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 29 апреля, 2018 Опубликовано 29 апреля, 2018 · Жалоба Например, по причине отсутствия барьеров в нужных местах. Это для 1-го глюка или второго? Если второго, то в тестовой программе ничего нет кроме систика, в котором мащется ножкой. А в основной - просто чтение блока из I2C устройства. Чтение едет правильно, только частота клока I2C на порядок ниже. Как такое может быть - он же аппратно формируется. Не мжет же делитель зависеть от того, что проц под дебаггером запустили? А с первым глком еще не понятнее - устройство не первой свежести, выпущено приличное количество, и никогда небыло никких проблем. А под дебаггером - связь с еепромкой не работает. Ну это ладно, я еще посмотрю, интереснее второй глюк - коллега там уже в ступроре полном. Ну не ногодрыгом-же I2C делать! Хотя, в том режиме у него больше ничего не делается - проц периодически считывает блок по i2c, небольшая обраткока и отсылает в аурт. Так что, можно и ногодрыгом (на него я надеюсь, дебаггер никаки не повлияет!), в крайнем случае. Но непонятна причина. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 29 апреля, 2018 Опубликовано 29 апреля, 2018 · Жалоба Это для 1-го глюка или второго? Да для обоих подойдет. Не мжет же делитель зависеть от того, что проц под дебаггером запустили? Может, если его запись осуществляется некорректно. Ну не ногодрыгом-же I2C делать! Только так и делаю. У меня нет ни времени ни желания искать обходы для 100500 аппаратных глюков модулей I2C на дюжине используемых платформ. Софтовый же абсолютно надежен и предсказуем, там не приходится ждать приколов типа "мы не поддерживаем clock stretching и repeated start". Все вышесказанное, разумеется, относится к режиму master. Единственный приличный аппаратный контроллер I2C, который я встречал, использовался в мелких AVR типа ATmega48 и процессорах LPC13xx (автор один). Вот там можно было смело полагаться на железо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
serglg 0 30 апреля, 2018 Опубликовано 30 апреля, 2018 (изменено) · Жалоба Да для обоих подойдет. Только так и делаю. У меня нет ни времени ни желания искать обходы для 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. Изменено 30 апреля, 2018 пользователем serglg Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 30 апреля, 2018 Опубликовано 30 апреля, 2018 · Жалоба Сделал работу i2c для некоего мелкого STM32 (конкретно, сейчас не промню, но проект имеется, естественно) - аппаратно, как положено. Над битами, временными диаграммами пришлось помедитировать и все. Повезло? P. S. HAL-ами не пользуюсь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 30 апреля, 2018 Опубликовано 30 апреля, 2018 · Жалоба Только так и делаю. У меня нет ни времени ни желания искать обходы для 100500 аппаратных глюков модулей I2C на дюжине используемых платформ. А другие интерфейсы (UART, SPI, ...) на этой дюжине тоже ногодрыгом реализуете? :smile3046: В чём разница между I2C и каким-то другим последовательным интерфейсом? Софтовый же абсолютно надежен и предсказуем, мрак.... ногодрыг в наше время на современных МК на вдоль и поперёк изъезженном I2C???... полный мрак... :smile3009: Писал драйвера I2C на LPC23xx, LPC17xx, OMAP-L137, STM32F4, XMC4500, MSP430 - везде использовал встроенный I2C-контроллер, кое-где - с DMA, кое-где - на шине висела гроздь устройств. Коллеги писали на Tiva TM4C129 - тоже аппаратно. Ни разу не возникло необходимости или желания заниматься ногодрыгом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 173 30 апреля, 2018 Опубликовано 30 апреля, 2018 · Жалоба Да ни при чем тут барьеры... Не надо никаких программных ногодрыгов, пожалуйста. Да, согласен, что аппаратный I2C в STM32- та еще задача нормально поднять, хотя хватает полдня чтобы по документации написать хороший драйвер с обработкой ошибок и DMA... Но это все лирика :rolleyes: Касательно проблемы автора: под дебаггером закройте окошко отладочное с регистрами I2C-модулей, приятно удивитесь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 30 апреля, 2018 Опубликовано 30 апреля, 2018 · Жалоба Касательно проблемы автора: под дебаггером закройте окошко отладочное с регистрами I2C-модулей, приятно удивитесь. А их никто и не открывал. про проблему сброса статусны битов когда дебаггер читает регистры - я в курсе. К тому-же - в "Глюке #2" все еще чудесатее, т.к. из 4-х плат только в одной без дебаггера частота клока I2C соответствует заданной, а в 4-х платах - нет. Прошивка, разумеется. одна и та-же. Тутеже дело не в дебаггере. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 30 апреля, 2018 Опубликовано 30 апреля, 2018 · Жалоба К тому-же - в "Глюке #2" все еще чудесатее, т.к. из 4-х плат только в одной без дебаггера частота клока I2C соответствует заданной, а в 4-х платах - нет. Ну так выведите значения всех регистров, от коих эта частота зависит, в отладочный UART (или другой удобный интерфейс). И увидите что не так. В чём проблема? PS: Вопрос вроде не в ветке "Для чайников"..... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardEgor 76 30 апреля, 2018 Опубликовано 30 апреля, 2018 · Жалоба А что, от этого текст программы поменяется? Так откуда же я знаю что у вас там в программе и процессоре происходит? Тут один студент несколько дней отлаживал программу в дебаггере - не мог получить правильную частоту в логическом анализаторе Keil. Оказалось дебажил в симуляторе.... Пошагово пройдите настройку процессора, смотрите правильно ли выставлены регистры RCC и I2C и т.д. Выведите частоту на MCO, посмотрите осциллографом. А у вас точно I2C? может SMBus? Ну так выведите значения всех регистров, от коих эта частота зависит, в отладочный UART (или другой удобный интерфейс). И увидите что не так. В чём проблема? ТС отказывается учиться работать в дебаггере :) И ничего полезного не говорит :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 30 апреля, 2018 Опубликовано 30 апреля, 2018 · Жалоба А другие интерфейсы (UART, SPI, ...) на этой дюжине тоже ногодрыгом реализуете? :smile3046: Нет. В чём разница между I2C и каким-то другим последовательным интерфейсом? Правильный вопрос. Разница в том, что I2C в большинстве случаев используется для однократной записи незначительного количества информации. мрак.... ногодрыг в наше время на современных МК на вдоль и поперёк изъезженном I2C???... полный мрак... :smile3009: Эмоции, вижу, просто зашкаливают Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 30 апреля, 2018 Опубликовано 30 апреля, 2018 · Жалоба Так откуда же я знаю что у вас там в программе и процессоре происходит? В том-то и дело, что болше ничгео не происходит - сделан был тестовый проект, в котором кроме i2c больше ничего нет. Тут один студент несколько дней отлаживал программу в дебаггере - не мог получить правильную частоту в логическом анализаторе Keil. Оказалось дебажил в симуляторе.... Коллеге, который с этим возится, скоро 60, совсем не студент :) Хотя, я больше чем уверен, что где-то какая-то "детская ошибка" сидит. Пошагово пройдите настройку процессора, смотрите правильно ли выставлены регистры RCC и I2C и т.д. Выведите частоту на MCO, посмотрите осциллографом. А у вас точно I2C? может SMBus? Нет. А для проверки частоты использовалось махание ножкой в систике. ТС отказывается учиться работать в дебаггере :) И ничего полезного не говорит :( Если Вы не заметили, это вообще не у меня а у коллеги. У меня - "глюк 1", но я с ним пока больше не возился. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться