Jump to content

    
nanorobot

А может быть Holtek?

Recommended Posts

2 часа назад, KnightIgor сказал:

...всякие остановки растягивают надолго SCL, что, похоже, вводит в заблуждение как саму машину I2C, так и периферию.

Там в STM-ках в регистрах DEBUG-а модуль I2C можно, вроде, также "замораживать", как, например, таймеры. Может, поможет чем-то. А насчет ввода в заблуждение периферии - очень вряд ли, I2C построен на т.н. статической логике - минимальная тактовая равна 0. SMBUS, надстройка над I2C, эту статичность ломает, поэтому там да, просто так остановить транзакцию в любом месте, не порушив обмен, не получится. Разве что, как я говорил, через модуль DEBUG.

Share this post


Link to post
Share on other sites
5 hours ago, Arlleex said:

Там в STM-ках в регистрах DEBUG-а модуль I2C можно, вроде, также "замораживать", как, например, таймеры. Может, поможет чем-то. А насчет ввода в заблуждение периферии - очень вряд ли, I2C построен на т.н. статической логике - минимальная тактовая равна 0. SMBUS, надстройка над I2C, эту статичность ломает, поэтому там да, просто так остановить транзакцию в любом месте, не порушив обмен, не получится. Разве что, как я говорил, через модуль DEBUG.

Основная проблема с STM321xx и аналогично - с GD32F1xx, - разрушающее действие отладчика (not "non intrusive"). Да, да, именно так дела и обстоят, хотя и не должны. Об этом писалось 10-12 лет назад в этом форуме тоже. Самая неприятная вещь, что бит ADDR в регистре SR1 стирается, когда отладчик считывает SR1 и SR2 - именно такая последовательность описана в доке для сброса бита ADDR. Поэтому при отладке исполнение любой команды (хоть одной ассемблерной) после остановки, где еще виден этот установленный бит, тут же его сбрасывает. И понеслась: полное нарушение логики периферии.

Share this post


Link to post
Share on other sites
27 minutes ago, KnightIgor said:

Самая неприятная вещь, что бит ADDR в регистре SR1 стирается, когда отладчик считывает SR1 и SR2

Так и останавливатесь после чтения из этих регистров.

И не будет никакого разрушения мозга.

Share this post


Link to post
Share on other sites
9 часов назад, KnightIgor сказал:

Основная проблема с STM321xx и аналогично - с GD32F1xx, - разрушающее действие отладчика (not "non intrusive")...

DAP подключен к адресному пространству ровно таким же способом, как и CPU (т.е. является полноценным шинным мастером), поэтому для периферии нет волшебного указания, кто сейчас работает с ней. Так сделано не только в STM32, но и во многих других МК на базе Cortex-M (хотя не только Cortex-M, потому что CoreSight DAP - это целая архитектура отладочных средств, узаконенная на бумаге ARM-ом). В целом я с Вами согласен насчет кривоватости I2C в STM-ках. Однако не такая там большая беда, как ее здесь описывали многие:wink: Попробуйте в связке с DMA работать - насколько помню (давно I2C + DMA юзал), там будет чуть проще даже.
 

8 часов назад, x893 сказал:

Так и останавливатесь после чтения из этих регистров.

Я не знаю, в какой среде работает KnightIgor, у меня, например, Keil.
В нем, если окошко с регистрами I2C открыть и запустить программу на исполнение, работа с периферией порушится.

P.S. А. Вы имеете ввиду поставить точку останова и лишь после этого открывать регистры? Может сработать, да. Но не везде удобно.

Share this post


Link to post
Share on other sites
10 часов назад, KnightIgor сказал:

Самая неприятная вещь, что бит ADDR в регистре SR1 стирается, когда отладчик считывает SR1 и SR2 - именно такая последовательность описана в доке для сброса бита ADDR

У многих отладчиков регистры описаны в текстовом файле. Можно поменять местами их описания в этом файле и отладчик будет их считывать в обратном порядке. "Я так думаю".

Share this post


Link to post
Share on other sites
6 hours ago, Arlleex said:

DAP подключен к адресному пространству ровно таким же способом, как и CPU (т.е. является полноценным шинным мастером), поэтому для периферии нет волшебного указания, кто сейчас работает с ней. Так сделано не только в STM32, но и во многих других МК на базе Cortex-M (хотя не только Cortex-M, потому что CoreSight DAP - это целая архитектура отладочных средств, узаконенная на бумаге ARM-ом). В целом я с Вами согласен насчет кривоватости I2C в STM-ках. Однако не такая там большая беда, как ее здесь описывали многие:wink: Попробуйте в связке с DMA работать - насколько помню (давно I2C + DMA юзал), там будет чуть проще даже.
 

Я не знаю, в какой среде работает KnightIgor, у меня, например, Keil.
В нем, если окошко с регистрами I2C открыть и запустить программу на исполнение, работа с периферией порушится.

P.S. А. Вы имеете ввиду поставить точку останова и лишь после этого открывать регистры? Может сработать, да. Но не везде удобно.

У меня как KEIL, так и CubeIDE. Текущий проект, в который втулили GD32F, - под CubeIDE, но и под KEIL наблюдается влияние отладчика (разработку поддержки для I2C я делал под ним в далекие годы). Я не разработчик микропроцессоров, но "non intrusive" - это важная характеристика. Помнится, C8051 процессоры от SiLabs имели даже JTAG (у меня был проект с таким процессором и FPGA в связке по JTAG Chain), и там SiLabs делал (маркетинговый) акцент на "non intrusive", и это работало.

Мой "драйвер" для I2C для STM32 может работать как по прерываниям, так и по DMA: определяю во время компиляции. В данном проекте эти каналы DMA используются для UART для подержки modbus, поэтому приходится только по прерываниям.

 

Актуализация по GD32F103.

Вчера потратил пол-дня и втулил пример из библиотеки поддержки для GD32F1xx с синхронной работой с I2C в проект. Заработало, но удовлетворения не принесло...

 

P.S. Как я писал, канал температуры в ADC в GD32F103 при нормальном питании в 3.3V залипает на максимуме. Тут вдруг попала в руки плата с GD32F303. Бинарник для GD32F103 взлетел на нем моментально, и температурный канал ADC работает правильно. Следом пробежала инфа от дистрибьютора, что GigaDevice рекомендует применять 303 вместо 103.

Edited by KnightIgor

Share this post


Link to post
Share on other sites
On 10/7/2021 at 10:57 PM, Vasily_ said:

А что мешает взять кортекс от Майкрочип ?

Незнакомая периферия, меньшее, по сравнению с STM32, community.  Отсутствие порта ChibiOS.  Но все равно взял, пробую...

Share this post


Link to post
Share on other sites
13 minutes ago, nanorobot said:

Отсутствие порта ChibiOS.

А разве там не кортекс? Порты во всех нормальных осях "затачиваются" под ядро, но не периферию.

Более того, правилом хорошем тона является писать под CMSIS, а по-хорошему надо сразу под CMSIS_OS. В таком случае проект вообще не привязан к какой-то конкретной оси.

 

Share this post


Link to post
Share on other sites
44 минуты назад, nanorobot сказал:

Незнакомая периферия

Пару вечеров по изучать.

 

44 минуты назад, nanorobot сказал:

меньшее, по сравнению с STM32, community.

В данный момент это большой плюс.

 

44 минуты назад, nanorobot сказал:

Отсутствие порта ChibiOS.

Не в курсе, но думаю это не проблема.

Share this post


Link to post
Share on other sites
7 minutes ago, Vasily_ said:

Пару вечеров по изучать.

Только один-два вида периферии. Но не в этом дело, работаю с LPC/STM лет восемь с копейками. Не хочется менять нарботки. Тем не менее, без проблем перейду, если понадобится. В целом я Ваш ответ понял)

53 minutes ago, nanorobot said:

Отсутствие порта ChibiOS

А как ОС привязана к периферии? Ведь всё осезависимое у кортексов одинаковое: systic, pends, svc.

Share this post


Link to post
Share on other sites
14 minutes ago, haker_fox said:

А как ОС привязана к периферии? Ведь всё осезависимое у кортексов одинаковое: systic, pends, svc.

ОС не привязана к периферии , я этого и не утверждал. Но в ChibiOS еще и HAL имеется.

Edited by nanorobot

Share this post


Link to post
Share on other sites
25 minutes ago, nanorobot said:

Но в ChibiOS еще и HAL имеется.

Это понятно. Вы имете в виду на периферию общего назначения: таймеры, порты, АЦП, ЦАП?

9 minutes ago, nanorobot said:

Класс! Можно поупражняться в портировании!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.