|
На что бы перейти..., В плане платформы |
|
|
|
Mar 22 2018, 16:13
|

Местный
  
Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264

|
С практикой работы с STM32 у меня пополняется чаша больше ненависти к этим камням, нежели положительных эмоций. Вот элементарно - есть АЦП внешний, управляется через SPI, CS-ом дергать обязательно. В STM32 CS не дергается аппаратно при транзакциях SPI, не понимаю, почему эти говноразработчики из STMicroelectronics не могут сделать это уже в какой реализации своих линеек микроконтроллеров? Из-за такого намеренного "косяка", который они вроде как и не пытаются исправить, невозможно запустить DMA на этот SPI, приходится запускать чертов таймер, дергать лапой в прерывании и там же запускать транзакцию (одиночную), потом снова выжидать нужное время и поднимать CS обратно, формируя нужные длительности между CS и первым/последним клоком SCLK... Помню в AT91SAM7X512 (и младших по памяти моделях) была возможность не то что аппаратно лапкой CS дергать, так даже время задавалось в количествах тактов вот этих самых задержек. А тут фигу. С ходу даже не придумал как аппаратным таймером ножку аппаратно дергать так, чтобы еще после опускания CS выжидалось время небольшое и затем осуществлялась транзакция по SPI без прерываний, по DMA , например. И, чувствую, такой возможности тупо нет. Хотя, казалось бы, банальная вещь - что сложного было реализовать полностью аппаратный CS? Урезали половину функциональности DMA<->SPI... И вот знаете, косяков все больше и больше обнаруживается с каждым детальным разбором. Какие камни наиболее гибкие в этом плане? ПЛИС не в расчет, знаю что там проще сделать такое и т.д. но интересует возня именно с Cortex-M профиля. Раньше немного работал с ARM7TDMI, но это уже устаревший камень, Cortex-ы для меня более привлекательны, хотелось бы что-то действительно с хорошей периферией. Прокомментируйте, пожалуйста.
|
|
|
|
|
 |
Ответов
|
May 6 2018, 17:34
|

Местный
  
Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264

|
Цитата Вы внимательнее прочитайте, что я написал: при выполнении линейного кода из флешь. А теперь посчитайте например за сколько тактов выполнится блок инструкций в 128-и битах? А если все (или многие инструкции 32-битные)? И сколько тактов нужно чтобы дочитать следующий блок на данной частоте МК? А теперь подумайте что в Tiva этот блок в 2 раза больше. Да какая разница сколько тактов будет выполняться блок инструкций в 128 битах? Все эти prefetch-буферы и ускорители, а в Вашем случае более широкая шина необходима лишь для обеспечения zero-wait-state при чтении из Flash (значит 4 32-битные инструкции за 4 такта будет выполнено). Для Tiva, поскольку в нем ускорителя нет, сделали более широкую шину, для STM32 - поставили ускоритель. Но лишь для одной цели - получить нулевое ожидание при доступе к данным или инструкции при чтении из Flash. А раз это условие выполнено, то STM32 выигрывает, поскольку может исполнять линейный код с бОльшей частотой. Какая разница какая там шина, если что там, что там задержка при чтении из Flash отсутствует при чтении линейного кода? Между заполнениями 128-битных строк ускорителя тоже 0 циклов ожидания, так что при вычитке следующих 4 инструкций никакого ожидания не происходит. Цитата Опять же ещё раз открываем моё исходное сообщение и ещё раз внимательно перечитываем (раз не получается с первого раза):"когда мы выбирали Tiva для своего проекта". Хорошо, с этим понятно. Цитата Не очень понятно как вообще можно просто так передать из I2C в UART без какой-либо обработки протокола? Уже хотя бы потому, что I2C - это не просто поток байтов, а ещё и старты/стопы и адресации и переключение передача/приём и т.п. Ну, скажем, сформировать старт-стоп можно. А вот все пересылки данных ничем не отличаются между I2C и UART. Внешнее устройство пишет в UART какой-нибудь зарезервированный символ - XMC4800 формирует старт-условие. Дальше устройство пишет физический байт адреса по UART - он транслируется в I2C-шную посылку. И все остальные байты передаются либо принимаются (тем более UART полнодуплексный). По завершении транзакции XMC4800 формирует стоп-условие. Правда для этого XMC4800 нужно знать длину записываемых/считываемых данных для корректной работы логики запуска DMA. Ну опять же, это все мысли вслух, и если уж докопаться, то можно разных изворотов придумать, как угодно творческой душе разработчика (и не надо вот сейчас говорить что это сплошной бред и т.д., порой причудливые решения куда лучше справляются с задачей). Цитата И обработку этих запросов в DMA-контроллере сделали по уровню, а не по edge. Вот в XMC к сожалению до этого не додумались и там с этим связано много проблем. А какие преимущества запроса по уровню, а не по фронту? Цитата PS: В первую очередь советую Вам сразу же на купленной плате проверить ревизию чипа (XMC). И перапаять на последнюю. ... Так что имейте в виду. Жесть  Ревизию гляну как доберусь до платки. Спасибо, буду знать.
|
|
|
|
|
May 6 2018, 20:16
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Arlleex @ May 6 2018, 20:34)  Между заполнениями 128-битных строк ускорителя тоже 0 циклов ожидания, так что при вычитке следующих 4 инструкций никакого ожидания не происходит. Да ладно?!... Похоже вы так и не взяли калькулятор и не посчитали... 4 инструкции в 128-битной строке кеша (допустим все они 1-тактные) - значит 4 такта. А сколько тактов wait-states требуется STM32 на 180МГц на выборку очередной порции данных из кеша при кеш-промахе? 7 или 8? И как позвольте узнать будет 0 тактов ожидания между заполнениями строк, если вся строка выполняется за 4 такта, а на чтение новой нужно 8 тактов??? (ещё раз - разговор про линейный код, или линейный участок кода по-крайней мере такой длины, что не влезает в кеш; т.е. - имеют место кеш-промахи). И "ускоритель" в STM32 как я понимаю - это и есть просто кеш команд. Ну так в Tiva он тоже есть, только маленький. Цитата(Arlleex @ May 6 2018, 20:34)  Ну опять же, это все мысли вслух, и если уж докопаться, то можно разных изворотов придумать, как угодно творческой душе разработчика Прочитаете мануал - разберётесь с возможностями. Например у меня на XMC была задача: необходимо было передать из одного устройства на XMC в другое (на XMC) по UART небольшой пакет с данными (результаты вычислений). Кроме самих данных необходимо было в этой же пересылке передать и время получения этих данных на устройстве-источнике данных (в некий момент времени Т на устройстве-источнике данные считываются с АЦП, над ними выполняется ряд математических операций, полученный результат отправляется устройству-приёмнику, а также устройству приёмнику нужно передать момент времени чтения данных из АЦП (устройство-приёмник должно знать когда было чтение по его собственным часам) с максимально-возможной точностью, желательно до такта CPU). Так вот я сделал примерно так: от таймера, который своим сигналом S1 запускает преобразование АЦП, также через некоторое время T2 (несколько мкс) генерится сигнал S2, запускающий передачу содержимого FIFO UART-а. По прерыванию завершения преобразования АЦП в ISR обрабатываются данные и записываются в FIFO UART. Время преобразования АЦП + время вызова и работы ISR заведомо меньше T2. Значит сигнал S2 возникает в момент когда данные для передачи уже лежат в FIFO. В принимающем XMC я первый перепад на линии RX.UART (начала старт-бита) фиксирую таймером. Получается синхронизация ведущий-ведомый с точностью до такта частоты тактирования таймеров. И без джиттера! На каком еще МК можно сделать подобное? Я таких не знаю. Цитата(Arlleex @ May 6 2018, 20:34)  А какие преимущества запроса по уровню, а не по фронту? Я где-то в этой теме (а может другой, но недавно) уже подробно описывал какие проблемы возникают при генерации DMA-запросов по перепаду уровня заполненности FIFO. Не хочу повторяться. Так вот: DMA-event-ы "по уровню" полностью снимают эти проблемы. Вот оно: https://electronix.ru/forum/index.php?showt...t&p=1558972
|
|
|
|
Сообщений в этой теме
Arlleex На что бы перейти... Mar 22 2018, 16:13 _pv а таймер разве не может дёргать по совпадению и CS... Mar 22 2018, 16:30 jcxz Цитата(Arlleex @ Mar 22 2018, 18:13) Вот ... Mar 22 2018, 16:52 Arlleex Цитата(_pv @ Mar 22 2018, 19:30) а таймер... Mar 22 2018, 16:55 jcxz Цитата(Arlleex @ Mar 22 2018, 18:55) Пожа... Mar 22 2018, 17:03 twix Цитата(Arlleex @ Mar 22 2018, 17:55) Види... Mar 22 2018, 18:00 _pv Цитата(Arlleex @ Mar 22 2018, 22:55) Атме... Mar 22 2018, 19:27 Arlleex jcxz, как раз листаю референс на XMC4800. Общее вп... Mar 22 2018, 17:23 inventor Цитата(Arlleex @ Mar 22 2018, 20:23) jcxz... Apr 7 2018, 14:55 yes > В STM32 CS не дергается аппаратно при транзак... Mar 22 2018, 18:35 technik-1017 Как альтернативу STM32 рассматриваю чипы SmartFusi... Mar 22 2018, 19:17 skripach LPC54 CSами умеет дергать невероятно, с настраивае... Mar 23 2018, 01:51 Arlleex Цитата(twix @ Mar 22 2018, 21:00) Вы може... Mar 23 2018, 13:54 jcxz Цитата(Arlleex @ Mar 23 2018, 15:54) 10МБ... Mar 23 2018, 15:49 adnega Цитата(Arlleex @ Mar 22 2018, 19:13) нево... Mar 24 2018, 07:21 dac QUOTE (adnega @ Mar 24 2018, 13:21) 2. В ... Mar 24 2018, 07:52  adnega Цитата(dac @ Mar 24 2018, 10:52) приходит... Mar 24 2018, 08:11   dac QUOTE (adnega @ Mar 24 2018, 14:11) 1мкс ... Mar 24 2018, 08:54  _pv Цитата(dac @ Mar 24 2018, 14:52) а еще из... Mar 24 2018, 08:34  jcxz Цитата(dac @ Mar 24 2018, 09:52) а еще из... Mar 24 2018, 10:21   adnega Цитата(jcxz @ Mar 24 2018, 13:21) на STM3... Mar 24 2018, 13:25 Arlleex Да вот элементарный пример, решение которого полно... Mar 24 2018, 17:02 adnega Цитата(Arlleex @ Mar 24 2018, 20:02) DMA ... Mar 24 2018, 17:16 Andrew Su Добрый день.
На отладочнике STM32L476-disco провер... Mar 25 2018, 11:36 backa TI "TM4C1294" - дорого и сердито - SPI р... Apr 24 2018, 20:31 k155la3 Цитата(backa @ Apr 24 2018, 23:31) TI ... Apr 26 2018, 13:38  backa Цитата(k155la3 @ Apr 26 2018, 17:38) Нечт... Apr 26 2018, 23:16   k155la3 Цитата(backa @ Apr 27 2018, 02:16) . . . ... Apr 27 2018, 16:09    jcxz Цитата(k155la3 @ Apr 27 2018, 19:09) IAR,... Apr 28 2018, 05:45     k155la3 Цитата(jcxz @ Apr 28 2018, 08:45) О каких... Apr 28 2018, 13:09 AlexandrY Цитата(Arlleex @ Mar 22 2018, 19:13) Каки... Apr 28 2018, 07:58 ViKo Цитата(AlexandrY @ Apr 28 2018, 10:58) Во... Apr 28 2018, 08:55  jcxz Цитата(ViKo @ Apr 28 2018, 11:55) Без флэ... Apr 28 2018, 09:52  AlexandrY Цитата(ViKo @ Apr 28 2018, 11:55) Без флэ... Apr 28 2018, 10:48 segment А что за "Wireless connectivity interface for... Apr 28 2018, 12:00 AlexandrY Цитата(segment @ Apr 28 2018, 15:00) А чт... Apr 28 2018, 14:02  k155la3 Цитата(AlexandrY @ Apr 28 2018, 17:02) . ... Apr 28 2018, 18:04   adnega Цитата(k155la3 @ Apr 28 2018, 21:04) У ST... Apr 28 2018, 18:59    k155la3 Цитата(adnega @ Apr 28 2018, 21:59) Может... Apr 28 2018, 19:23     adnega Цитата(k155la3 @ Apr 28 2018, 22:23) А ес... Apr 29 2018, 05:45      k155la3 Цитата(adnega @ Apr 29 2018, 08:45) Т.е. ... Apr 29 2018, 10:46 Arlleex За документацию с кучей перекрестных ссылок можно ... May 6 2018, 08:20 AlexandrY Цитата(Arlleex @ May 6 2018, 11:20) За до... May 6 2018, 12:05  jcxz Цитата(AlexandrY @ May 6 2018, 15:05) Сек... May 6 2018, 15:39 Arlleex Тогда действительно что-то с ним точно не так
Ко... May 6 2018, 15:06 Arlleex ЦитатаНу "в каком-то из STM32" максимум ... May 6 2018, 16:29 jcxz Цитата(Arlleex @ May 6 2018, 19:29) 3. В ... May 6 2018, 17:04 Arlleex Да уж, я думал я один изворачиваюсь с периферией к... May 6 2018, 21:09 Arlleex Итак, ради интереса сделал тест.
Использую аппарат... May 7 2018, 19:56 jcxz Цитата(Arlleex @ May 7 2018, 22:56) 7. Вк... May 9 2018, 05:06 COMA Я для себя определил два варианта для перехода:
се... May 9 2018, 05:58 Arlleex ЦитатаТолько зачем было делать столько телодвижени... May 9 2018, 13:03 Arlleex Итак, выложу сюда две растактовки из экспериментов... May 9 2018, 15:26 jcxz Цитата(Arlleex @ May 9 2018, 18:26) Итак,... May 9 2018, 15:48 Arlleex Никакого абсолютно. У меня в проектах он всегда вк... May 9 2018, 15:54 Arlleex Подниму свою же тему.
1. Программировал платку с X... Jul 6 2018, 05:17 jcxz Цитата(Arlleex @ Jul 6 2018, 08:17) 1. Пр... Jul 6 2018, 08:05  Arlleex Цитата(jcxz @ Jul 6 2018, 12:05) PS: Ну и... Jul 6 2018, 08:25   jcxz Цитата(Arlleex @ Jul 6 2018, 11:25) А впе... Jul 6 2018, 08:30    Arlleex Цитата(jcxz @ Jul 6 2018, 12:30) Да, чере... Jul 6 2018, 08:35     jcxz Цитата(Arlleex @ Jul 6 2018, 11:35) Вы ис... Jul 6 2018, 08:36 Arlleex Боюсь мне начальство не выделит времени на такие п... Jul 6 2018, 09:07 jcxz Цитата(Arlleex @ Jul 6 2018, 12:07) Боюсь... Jul 6 2018, 09:50  Arlleex Цитата(jcxz @ Jul 6 2018, 13:50) Начальст... Jul 6 2018, 10:04
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|