|
Глюки с I2C |
|
|
|
Apr 29 2018, 14:12
|
Профессионал
    
Группа: Свой
Сообщений: 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мс.
Есть идеи?
|
|
|
|
|
Apr 29 2018, 17:24
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Цитата(HardEgor @ Apr 29 2018, 16:19)  Каких идей вы хотите? Например - почему работа одной и той-же прошивки, отличается под дебаггером и не под дебаггером Кейла? Цитата Если вы не можете пошагово пройти настройку тактовой частоты, то научить вас пользоваться дебаггером? А что, от этого текст программы поменяется?
|
|
|
|
|
Apr 29 2018, 18:17
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Цитата(aaarrr @ Apr 29 2018, 18:36)  Например, по причине отсутствия барьеров в нужных местах. Это для 1-го глюка или второго? Если второго, то в тестовой программе ничего нет кроме систика, в котором мащется ножкой. А в основной - просто чтение блока из I2C устройства. Чтение едет правильно, только частота клока I2C на порядок ниже. Как такое может быть - он же аппратно формируется. Не мжет же делитель зависеть от того, что проц под дебаггером запустили? А с первым глком еще не понятнее - устройство не первой свежести, выпущено приличное количество, и никогда небыло никких проблем. А под дебаггером - связь с еепромкой не работает. Ну это ладно, я еще посмотрю, интереснее второй глюк - коллега там уже в ступроре полном. Ну не ногодрыгом-же I2C делать! Хотя, в том режиме у него больше ничего не делается - проц периодически считывает блок по i2c, небольшая обраткока и отсылает в аурт. Так что, можно и ногодрыгом (на него я надеюсь, дебаггер никаки не повлияет!), в крайнем случае. Но непонятна причина.
|
|
|
|
|
Apr 29 2018, 19:21
|
Гуру
     
Группа: Свой
Сообщений: 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 (автор один). Вот там можно было смело полагаться на железо.
|
|
|
|
|
Apr 30 2018, 04:23
|
Частый гость
 
Группа: Участник
Сообщений: 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
|
|
|
|
|
Apr 30 2018, 05:22
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(aaarrr @ Apr 29 2018, 22:21)  Только так и делаю. У меня нет ни времени ни желания искать обходы для 100500 аппаратных глюков модулей I2C на дюжине используемых платформ. А другие интерфейсы (UART, SPI, ...) на этой дюжине тоже ногодрыгом реализуете? В чём разница между I2C и каким-то другим последовательным интерфейсом? Цитата(aaarrr @ Apr 29 2018, 22:21)  Софтовый же абсолютно надежен и предсказуем, мрак.... ногодрыг в наше время на современных МК на вдоль и поперёк изъезженном I2C???... полный мрак... Писал драйвера I2C на LPC23xx, LPC17xx, OMAP-L137, STM32F4, XMC4500, MSP430 - везде использовал встроенный I2C-контроллер, кое-где - с DMA, кое-где - на шине висела гроздь устройств. Коллеги писали на Tiva TM4C129 - тоже аппаратно. Ни разу не возникло необходимости или желания заниматься ногодрыгом.
|
|
|
|
|
Apr 30 2018, 07:44
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Цитата(Arlleex @ Apr 30 2018, 08:40)  Касательно проблемы автора: под дебаггером закройте окошко отладочное с регистрами I2C-модулей, приятно удивитесь. А их никто и не открывал. про проблему сброса статусны битов когда дебаггер читает регистры - я в курсе. К тому-же - в "Глюке #2" все еще чудесатее, т.к. из 4-х плат только в одной без дебаггера частота клока I2C соответствует заданной, а в 4-х платах - нет. Прошивка, разумеется. одна и та-же. Тутеже дело не в дебаггере.
|
|
|
|
|
Apr 30 2018, 10:33
|
Гуру
     
Группа: Свой
Сообщений: 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 (или другой удобный интерфейс). И увидите что не так. В чём проблема? ТС отказывается учиться работать в дебаггере  И ничего полезного не говорит
|
|
|
|
|
Apr 30 2018, 10:47
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(jcxz @ Apr 30 2018, 08:22)  А другие интерфейсы (UART, SPI, ...) на этой дюжине тоже ногодрыгом реализуете?  Нет. Цитата(jcxz @ Apr 30 2018, 08:22)  В чём разница между I2C и каким-то другим последовательным интерфейсом? Правильный вопрос. Разница в том, что I2C в большинстве случаев используется для однократной записи незначительного количества информации. Цитата(jcxz @ Apr 30 2018, 08:22)  мрак.... ногодрыг в наше время на современных МК на вдоль и поперёк изъезженном I2C???... полный мрак...  Эмоции, вижу, просто зашкаливают
|
|
|
|
|
Apr 30 2018, 11:01
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Цитата(HardEgor @ Apr 30 2018, 11:33)  Так откуда же я знаю что у вас там в программе и процессоре происходит? В том-то и дело, что болше ничгео не происходит - сделан был тестовый проект, в котором кроме i2c больше ничего нет. Цитата Тут один студент несколько дней отлаживал программу в дебаггере - не мог получить правильную частоту в логическом анализаторе Keil. Оказалось дебажил в симуляторе.... Коллеге, который с этим возится, скоро 60, совсем не студент  Хотя, я больше чем уверен, что где-то какая-то "детская ошибка" сидит. Цитата Пошагово пройдите настройку процессора, смотрите правильно ли выставлены регистры RCC и I2C и т.д. Выведите частоту на MCO, посмотрите осциллографом. А у вас точно I2C? может SMBus? Нет. А для проверки частоты использовалось махание ножкой в систике. Цитата ТС отказывается учиться работать в дебаггере  И ничего полезного не говорит  Если Вы не заметили, это вообще не у меня а у коллеги. У меня - "глюк 1", но я с ним пока больше не возился.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|