|
Глюки с 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 30 2018, 15:08
|
Знающий
   
Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725

|
Цитата(Allregia @ Apr 29 2018, 15:12)  Мне тут нужно было в одном относительно старом проекте, который делался на 4-м Кейле, поменять некоторые дефолтные настройки. К I2C оно не относится, но глюк я поймал именно с I2C! Сейчас на компе только 5-й, 4-го нет. Проц - тот-же F103, к нему по I2C подключена 24LC16. У F103 абсюлютно вычурно-глючный I2C. Я на эту тему писал неоднократно, делясь опытом своей борьбы в течение, не вру, недель двух. Итог ее: я победил, но ощущение подставы и подвоха не покидает. Поищи тему с моим ником. Суть выводов: - при работе по прерываниям страсть как не любит быть прерваным: дай прерыванию от I2C наивысший приоритет или обрабатывай определенные куски при глобально запрещенных прерываниях. - что будет стабильно работать при максимальных 72MHz такта процессора, напрочь рушится при, скажем, 24MHz, как правило по причине того, что... - в регистре статуса позможны комбинации битов машины состояния, которые не описаны в доке и не определены во всяких дефайнах! Эти комбинации нужно отслеживать в прерывании в посвященных им ветвям обработчика; при этом для этих комбинаций нельзя просто их проигнорировать, выйти из прерывания и дождаться типа "правильных", а приходится тупо ждать в цикле установки/сброса "лишних" битов. - необходимо особо обрабатывать случаи трансфера только одного или двух байтов, или когда осталось принять два или один байт. - шагать под отладчиком в прерывании I2C - это просто квантовые процессы сродни щелевому эксперименту. Сплошная печаль, короче. Когда мне в руки попался F051, я просто прыгал от восторга, запустив его I2C за часика два (с перерывами на напитки).
|
|
|
|
|
May 1 2018, 04:52
|
Частый гость
 
Группа: Участник
Сообщений: 146
Регистрация: 19-07-16
Пользователь №: 92 603

|
Цитата(KnightIgor @ Apr 30 2018, 21:08)  Сплошная печаль, короче. Когда мне в руки попался F051, я просто прыгал от восторга, запустив его I2C за часика два (с перерывами на напитки). Когда я после ногодрыга для I2C на Z8 впервые запустил аппаратный I2C на STM32L476, то вообще ничего не заметил. :-) Потому что Куб всё сгенерил, я вставил HAL-строки и всё. Память 64К пишется, читается.
|
|
|
|
|
May 1 2018, 10:22
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Цитата(serglg @ May 1 2018, 05:52)  Когда я после ногодрыга для I2C на Z8 впервые запустил аппаратный I2C на STM32L476, то вообще ничего не заметил. :-) Потому что Куб всё сгенерил, я вставил HAL-строки и всё. Память 64К пишется, читается. Предыдущая верси той платы, с которой колега возится, была тоже на L476, и никаких проблем с ней небыло. Они начались на новой плате с 452-м. В общем я решил помочь коллеге, и взял пару платок поиграться. Сразу скажу - в отличие от его экспериментов, я не заметил никакой разницы между платаи так и в том запускать под дебаггером или не под дебаггером. Отдал ему результаты. пусть дальше сам возится. Но(!), кое-какие нестыковки я все-же заметил. Причем из серии "этого не может быть, потому что этого не может быть никогда". Поясняю - простенькая программка на калохале, ничего кроме i2c в ней нет. Хал пробовался и 1.8.1 и 1.11.0, разницы в поведении между ними не выявлено. I2C Fast, 400kHz. и обычный на 100кгц. Константу делителя менял вручную. Проверено было 4 варианта источника тактовой - MSI_8MHz, MSI_16MHz, HSI_16MHz, HSE_24MHz. При этом переключался делитель PLLM соответственно 2-4-4-6, т.е. частот на входе PLL была во всех случаях неизменна - 4Мгц. Для контроля, на MCO выводитась частота с текущего источника деленая на 8 дя 8мгц и на 16 для остальных. Остальные настойки не менялись вообще. Каждый источник был проверен 2 раза, с разными константами делителя i2c. В основном цикле, с привязкой к систику (т.е. с периодом 1мс) читался по i2c регистр аккселерометра LSM6DS3. Сразу скажу - цикл 1мс во всех случаях был правильный, в отличие от не совсем точной частоты на MCO и полного балагана с частотой SCL. Просомтр в дебаггере регистров i2c криминала не вявил - что просили, то туда и записалось. Результаты: Код MSI_8: MCO=0.98 MHz, SCL100 = 38 kHz, SCL400 = 155 kHz. MSI_16: MCO=0.987 MHz, SCL100 = 152 kHz, SCL400 = 550 kHz. HSI_16: MCO=0.982 MHz, SCL100 = 140 kHz, SCL400 = 536 kHz. HSE_24: MCO=1.5 MHz, SCL100 = 113 kHz, SCL400 = 425 kHz. Т.е. частота MCO правильная, систика - тоже правильная, а SCK - более-менее правильная только для внешнего кварца. Напомню еще раз - во всех случаях. на входе PLL частота 4мгц, от которой и шло дальнейшее тактирование всего. Менялся только источник этих 4-х мгц. P.S. Да, я понмаю, калокуб и всякое тому подобное, но сгенерированый им исходник ведь не менялся. Тактирование - на вход PLL
|
|
|
|
|
May 1 2018, 10:52
|
Профессионал
    
Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848

|
Цитата(Allregia @ May 1 2018, 13:22)  . . . . Сразу скажу - цикл 1мс во всех случаях был правильный, в отличие от не совсем точной частоты на MCO и полного балагана с частотой SCL. . . . Насчет "балагана" непонятно. И частоты тоже. SCL характеризуется не частотой, а периодом, тк между фреймами могут быть паузы. Поэтому смотрите период SCL в ждущем режиме. Оптимально - синхрнизировать осц. (в начале приема или передачи блока) от внешнего сигнала, можно ногодрыгом. Намного более удобно пользоваться лог. анализаторм, где есть разборщик протокола I2C, а не рыться в осцилограмме. С лог. анализатором такие слеты вылввливаются "нараз". Для отладки рекомендую Вам прописать в 24LC16 12345 слова по всем адресам (data16 == address) и почитать их с автом. контролем. На запись - в томже стиле.
|
|
|
|
Сообщений в этой теме
Allregia Глюки с I2C Apr 29 2018, 14:12 HardEgor Цитата(Allregia @ Apr 29 2018, 21:12) Ест... Apr 29 2018, 15:19 Allregia Цитата(HardEgor @ Apr 29 2018, 16:19) Как... Apr 29 2018, 17:24  aaarrr Цитата(Allregia @ Apr 29 2018, 20:24) Нап... Apr 29 2018, 17:36   Allregia Цитата(aaarrr @ Apr 29 2018, 18:36) Напри... Apr 29 2018, 18:17    aaarrr Цитата(Allregia @ Apr 29 2018, 21:17) Это... Apr 29 2018, 19:21     serglg Цитата(aaarrr @ Apr 30 2018, 01:21) Да дл... Apr 30 2018, 04:23     jcxz Цитата(aaarrr @ Apr 29 2018, 22:21) Тольк... Apr 30 2018, 05:22      aaarrr Цитата(jcxz @ Apr 30 2018, 08:22) А други... Apr 30 2018, 10:47  HardEgor Цитата(Allregia @ Apr 30 2018, 00:24) А ч... Apr 30 2018, 10:33   Allregia Цитата(HardEgor @ Apr 30 2018, 11:33) Так... Apr 30 2018, 11:01    HardEgor Цитата(Allregia @ Apr 30 2018, 18:01) Кол... Apr 30 2018, 11:33 ViKo Сделал работу i2c для некоего мелкого STM32 (конкр... Apr 30 2018, 04:33 Arlleex Да ни при чем тут барьеры... Не надо никаких прогр... Apr 30 2018, 07:40 Allregia Цитата(Arlleex @ Apr 30 2018, 08:40) Каса... Apr 30 2018, 07:44  jcxz Цитата(Allregia @ Apr 30 2018, 10:44) К т... Apr 30 2018, 08:04   HardEgor Цитата(Allregia @ May 1 2018, 17:22) Т.е.... May 1 2018, 16:18 ViKo Допустимый диапазон частот на входе PLL описан в д... May 1 2018, 10:37 Allregia Цитата(ViKo @ May 1 2018, 11:37) Допустим... May 1 2018, 11:05  jcxz Цитата(Allregia @ May 1 2018, 14:05) И за... May 1 2018, 11:15   Allregia Цитата(jcxz @ May 1 2018, 12:15) "Об... May 1 2018, 11:26    k155la3 Цитата(Allregia @ May 1 2018, 14:26) . . ... May 1 2018, 11:29     Allregia Цитата(k155la3 @ May 1 2018, 12:29) Захва... May 1 2018, 11:33    jcxz Цитата(Allregia @ May 1 2018, 14:26) ... May 1 2018, 12:22     Allregia Цитата(jcxz @ May 1 2018, 13:22) Если Вам... May 1 2018, 12:52      jcxz Цитата(Allregia @ May 1 2018, 15:52) Вас ... May 1 2018, 17:10       Allregia Цитата(jcxz @ May 1 2018, 18:10) ЦитатаВа... May 1 2018, 17:17  k155la3 Цитата(Allregia @ May 1 2018, 14:05) . . ... May 1 2018, 11:20 Arlleex Во многих микроконтроллерах указывается именно пер... May 1 2018, 13:36 aaarrr Цитата(Arlleex @ May 1 2018, 16:36) GPIO_... May 1 2018, 14:00  Arlleex Цитата(aaarrr @ May 1 2018, 17:00) Зачем?... May 1 2018, 14:16   AVI-crak Кхм...
хотел скорости, а получил звон на линии...... May 1 2018, 14:37 Allregia Цитатаотсюда общая частота, замеряемая осциллограф... May 1 2018, 14:49
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|