Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Освоение ARM контроллеров
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Страницы: 1, 2
maxntf
Появилась необходимость в освоении ARM контроллеров.
Есть проект реализованный на PIC контроллере, который необходимо портировать на ARM. Это связано с тем, что в него нужно доработать реализацию воспроизведения аудио файлов.
Просьба помочь в выборе контроллера и отладочных средств к нему для изучения ARM, с учетом моих задач. Просто не хочется брать первую попавшеюся отладочную плату с установленным в нее контроллером. А выбрать тот набор оборудования и ПО, который поможет мне в изучении ARM и параллельно реализовать все мои задачи.
Основные параметры основываясь на старый проект:
1) Объем памяти программ не меньше 128kB.
2) Объем памяти данных не меньше 4kB. Учитывая что в старом проекте используется внешняя EEPROM для хранения параметров на 64kB, а в новом проекте еще и нужно хранить аудио треки. И насколько я успел поверхностно ознакомится, в ARM можно использовать внешнюю flash память и для памяти данных контроллера и для хранения треков и параметров. Если я прав, то тогда ARM можно брать вообще без внутреннего ОЗУ.
3) Большое количество портов. В старом проекте был PIC на 80 ног.
4) Нужно 17 АЦП для измерения напряжения, остальные GPIO.
5) 2 порта UART.
6) Желательно USB.
7) И самое главное возможность проиграть аудио ролики (не важно в каком формате хоть в “amr”) в аудио тракт GSM модема. Эти ролики будут подготовлены на ПК и записываться в цифровом формате во внешнюю flash (то есть никаких кодеков для записи аудио не нужно).
Есть под ARM готовые библиотеки для воспроизведения аудио файлов?
В качестве среды разработки хочу взять CooCox CoIDE (GCC Compiler) в виду того что она бесплатная. Вроде неплохие отзывы о ней. Кстати кто знает, в ней есть ОС под ARM.
ARM контроллер и отладочный комплект ST или NuVotone. Лучше ST так как на мой взгляд они наиболее популярны, а по второму производителю маловато информации в сети.
Заранее благодарен за любую помощь.
Forger
Цитата(maxntf @ Mar 29 2016, 17:17) *
Появилась необходимость в освоении ARM контроллеров
Примите наши искренние поздравления! sm.gif

Цитата
Просто не хочется брать первую попавшеюся отладочную плату с установленным в нее контроллером.
А в чем проблема в данном случае? Ведь под вашу "ресурсоемкую" задачу подойдут 95% отладочных плат, которые делают под ARM
agregat
Цитата(maxntf @ Mar 29 2016, 17:17) *
Появилась необходимость в освоении ARM контроллеров.


А зайти на сайт ST и выбрать по параметрическому поиску не пробовали...
Forger
Цитата(agregat @ Mar 29 2016, 18:59) *
А зайти на сайт ST и выбрать по параметрическому поиску не пробовали...

Что вы такое говорите?! Как можно?! Это же, это же ... запрещенный прием!!! smile3009.gif
Настоящие джентельмены так не поступают!

RadiatoR
Вы путаете назначение ОЗУ и энергонезависимой памяти.
Еще разберитесь - вас сейчас интересует отладочная плата с этими требованиями или чип подходящий к ним?
Если чип, то вариантов много, если отладка, то весь тот набор по крайней мере у ст не стоит. Придется выбирать. Но я бы выбрал обычную STM32F4 Discovery и на ней бы отработал все нужды. Собственно я в свое время так и сделал.
Tarbal
Да что вы все такие злые?
Ну не знает человек столько сколько вы -- так расскажите ему где и что читать.
Forger
Цитата(Tarbal @ Mar 29 2016, 20:18) *
Да что вы все такие злые?

При чем тут злоба? В данном случае по-доброму подтруниваем над откровенным нежеланием самого топикстартера самостоятельно почитать интернеты sm.gif

В конце-концов, если человек неглупый (а я в этом нисколько не сомневаюсь), то поймет наши "посылы" и все же попытается самостоятельно поискать ответы на свои вопросы.
А вот если уже интернеты не могут помочь, то милости просим - без проблем поможем, чем сможем sm.gif
maxntf
Цитата(ЯadiatoR @ Mar 29 2016, 19:07) *
Вы путаете назначение ОЗУ и энергонезависимой памяти.

Возможно я и ошибаюсь, просто я бегло просматривал архитектуру МК NUC505 Series от нувотон, и как я понял из этого
Memory
- 128 KB of embedded SRAM
- 2 MB of SPI Flash

То он как раз использует в качестве ОЗУ внешнюю флешь через какую то специальную I2C шину. Может я ошибаюсь?
К сожалению только пару дней как начал заниматься этим вопросом, по этому и интересуют советы понимающих людей.
Допустим дискавери есть с разными МК. Не хочется взять с контроллером которого может не хватить для моего проекта. Допустим на PIC в этом проекте у меня было занято из 128kB около 80%. И если я возьму отладочную плату с ARM на 128kB в котором попробую реализовать свой проект, хватит ли мне его памяти когда нужно еще ауди декодер какой туда впихнуть, а еще хотелось бы какую нибудь ОС (проект не маленький, на pic я использовал OSA) . Просто не зная аппетиты ARM, тяжело выбрать верное решения. А осваивать нужно имея на руках железо, а не только мат. часть.
STM32F4 Discovery это хорошо, но бюджет не резиновый и хотелось бы реализовать проект на МК из серии F0.
Или взять STM32F4 Discovery все сделать, а потом смотреть в какой более дешевый МК все это можно будет засунуть?
Взять заведомо мощнее МК я боюсь напороться на невозможность непереносимости проекта на более простой МК (например с F4 на F0). Потому как пока еще не понимаю разницу между ними. Ну кроме явных параметров, таких как память и быстродействие. Может это как написать проект под PIC32 а потом пытаться его перенести на pic12
Forger
Цитата(maxntf @ Mar 29 2016, 20:44) *
STM32F4 Discovery это хорошо, но бюджет не резиновый

Это что ж за бюджет такой, раз туда не влазит даже такая довольно простая отладочная плата? 05.gif

Читайте тут
maxntf
Цитата(Forger @ Mar 29 2016, 20:49) *
Это что ж за бюджет такой, раз туда не влазит даже такая довольно простая отладочная плата? 05.gif

Читайте тут


Не плата а МК который в ней.

Цитата(maxntf @ Mar 29 2016, 20:44) *
Взять заведомо мощнее МК я боюсь напороться на невозможность непереносимости проекта на более простой МК (например с F4 на F0). Потому как пока еще не понимаю разницу между ними. Ну кроме явных параметров, таких как память и быстродействие. Может это как написать проект под PIC32 а потом пытаться его перенести на pic12

scifi
Цитата(maxntf @ Mar 29 2016, 20:44) *
Допустим на PIC в этом проекте у меня было занято из 128kB около 80%. И если я возьму отладочную плату с ARM на 128kB в котором попробую реализовать свой проект, хватит ли мне его памяти когда нужно еще ауди декодер какой туда впихнуть, а еще хотелось бы какую нибудь ОС (проект не маленький, на pic я использовал OSA).

STM имеет интересную особенность: там в одинаковых корпусах часто бывают чипы пожирнее и похудее. Даже миграция между поколениями (STM32F1, STM32F2, STM32F4) есть (см. в даташите "compatible board design" но там заморочки с совместимостью софта). Кстати, 128Кбайт не припомню, у них 64, 256, 512 и т.д. Короче, берите пожирнее, а в серийное изделие можно будет поставить более экономный вариант. Но сначала надо проверить, что такой выбор действительно существует.
RadiatoR
Печально, что вы гоняясь за бюджетом и другими вещами до сих пор не сходили на сайт st.com и в продукт калькуляторе не отсеяли необходимые параметры и не убедились, что на F0 ваши требования реализовать в частность 17 ацп нельзя (по крайней мере без спец. приблуд типа аналоговых мультиплексоров и т.д.). До сих пор нет точных данных для помощи например с какой частотой нужно измерять аналоговый сигнал. И прочее...
+ даже базовые знания про SRAM и FLASH вы не удосужились изучить, но уже просите подобрать вам готовое бюджетное решение, прям как 3 основных составляющих
Forger
Цитата(maxntf @ Mar 29 2016, 20:55) *
Не плата а МК который в ней.

У вас код на ассемблере планируется писать? biggrin.gif
Если нет, то он довольно быстро переносится на любой МК, но при условии, что изначально был написан без жесткой привязки к конкретному железу!
Т.е. аппаратные части кода лежат тока в одном месте - в одном-двух файлах. Тогда портировать его можно хоть на PC sm.gif
Если у вас нет опыта написания кода подобным способом (пишите на ассемблере или голом С в стиле ассемблера),
то ищите снача подхощий проц, а потом под него отладочную плату, которая хотя бы из того же семейства.
Тогда переносить код будет проще.

Выбрать проц элементарно - заходите в на сайт производителя МК, находите там "параметрический поиск".
Уж проц тут за вас никто не выберет sm.gif
mantech
Цитата(maxntf @ Mar 29 2016, 20:44) *
Возможно я и ошибаюсь, просто я бегло просматривал архитектуру МК NUC505 Series от нувотон, и как я понял из этого


Рекомендую смотреть в сторону ST или NXP(LPCсерия). Т.к. вы новичек, то по этим мк смогут ответить быстрее и больше...
maxntf
Цитата(ЯadiatoR @ Mar 29 2016, 20:59) *
+ даже базовые знания про SRAM и FLASH вы не удосужились изучить, но уже просите подобрать вам готовое бюджетное решение, прям как 3 основных составляющих

Согласен. Тут я понял, сбило с толку SPI.
Просто я уже писал что знакомлюсь с ARM только второй день и попутно еще про плис читал. И в голове пока каша, там что то про то что основная программа загружается с внешней памяти, в ARM что то про шину взаимодействия периферии без участия процессора и т.д.
В общем пора отдыхать, завтра будем воевать дальше. А то пока эти свободные радикалы в голове до кучи соберешь, можно и свихнуться.
mantech
Цитата(maxntf @ Mar 29 2016, 20:44) *
Взять заведомо мощнее МК я боюсь напороться на невозможность непереносимости проекта на более простой МК (например с F4 на F0).


Странная какая-то переносимость с более лучшего на худший, как правило делают наоборот..
maxntf
Цитата(mantech @ Mar 29 2016, 21:46) *
Рекомендую смотреть в сторону ST или NXP(LPCсерия). Т.к. вы новичек, то по этим мк смогут ответить быстрее и больше...

Спасибо! Я собственно на ST пока и остановился, так как по ним много примеров есть.
jcxz
Цитата(mantech @ Mar 30 2016, 00:48) *
Странная какая-то переносимость с более лучшего на худший, как правило делают наоборот..

Что странного? Именно так и делают: берут самый жирный МК в линейке, запускают проект на нём. Потом, когда более-менее устаканятся хотелки и решение, смотрят что получилось по ресурсам и в какой более дешёвый МК это можно упаковать. Именно поэтому на отладках чаще всего ставят именно самый жирный МК из линейки.
Но упаковку в меньший МК стоит делать только если нужно серийное производство с достаточно большим объёмом, что в проекте "для себя" не актуально, имхо.
maxntf
Во избежание лишних дискуссий буду задавать более конкретные вопросы.
Помогите с выбором платы DISCOVERY в моем случае, для каждого МК я выписал основные критерии которые считаю важны для меня, возможно я что-то упустил:
STM32F401VC:
ROM - 256
RAM - 64
ADC - 16ch
DMA - для загрузки аудио файлов без проца
Комуникация UART, SPI, I2C
SDIO - если флешь будет карта SD
audio PLL - эта штука мне не понятна, нужна ли она мне будет для воспроизведения аудио?
STM32F407VG
ROM - 1024
RAM - 129
ADC - 16ch (вижу что в линейке есть и на 24 ch)
DMA - для загрузки аудио файлов без проца
Комуникация UART, SPI, I2C
SDIO - если флешь будет карта SD
Не вижу audio PLL
STM32F411VE (На мой взгляд наиболее подходящий и цена на проц приемлемая)
ROM - 512
RAM - 128
ADC - 16ch
DMA - для загрузки аудио файлов без проца
Комуникация UART, SPI, I2C
SDIO - если флешь будет карта SD
audio PLL - эта штука мне не понятна, нужна ли она мне будет для воспроизведения аудио?
jcxz
Цитата(maxntf @ Mar 30 2016, 13:33) *
ROM - 256

Сомневаюсь, что хотя-бы в одном из означенных МК найдёте столько ROM. Да и нафига она Вам?
Вот размер FLASH - другое дело.

PS: У Вас большие проблемы с терминологией. Вы путаете ОЗУ с FLASH (или чем-то другим), ROM с FLASH, видите указания на некие интерфейсы (I2C) которых нет.
Откройте любой учебник по МК - без знания основ никуда.
Даже помочь Вам сложно, ибо сложно понять, что Вам нужно.

Цитата(maxntf @ Mar 30 2016, 13:33) *
DMA - для загрузки аудио файлов без проца

DMA нужен для разгрузки CPU при работе с периферией. Ни о каких "файлах" он не знает и сделать с ними ничего не сможет. И есть он почти в каждом МК с ядром Cortex-M.

Цитата(maxntf @ Mar 30 2016, 13:33) *
Комуникация UART, SPI, I2C

Коммуникации чего с чем? Аппаратные модули такие есть почти в кажом МК Cortex-M. И даже обычно по неск. шт.
А для АЦП обычно ещё указывают требуемую частоту сэмплирования и разрядность. Кроме того - возможность мультиплексирования входов (или нужны именно отдельные АЦП).

Цитата(maxntf @ Mar 30 2016, 13:33) *
SDIO - если флешь будет карта SD

SD-карта без проблем вешается на SPI.

Цитата(maxntf @ Mar 30 2016, 13:33) *
audio PLL - эта штука мне не понятна, нужна ли она мне будет для воспроизведения аудио?

Полезна, если АЦП и ядро МК по каким-то причинам невозможно тактированть от одного источника. Либо, например, нужно выключать основной PLL для экономии энергии.
Для простого проигрывания звука обычно не нужен.

Для проигрывания звука ещё нужно его как-то вывести наружу. Т.е. - нужен ЦАП. Встроенный или внешний (внешний обычно на I2S или SPI).
Да - и если под "аудио-файлами" понимаете MP3-файлы, то Cortex-M0 будет скорей всего маловат. Хотя всё конечно зависит от требуемого битрейта

PS: Мой совет - возьмите любую отладочную плату и вначале научитесь хоть что-то программировать на ARM МК.
RadiatoR
Опять же как я и говорил - нечеткие требования например к аналоговым входам.
Что вы собрались измерять и с какой скоростью? Я не видел отладок с 24 ADC. Если есть - здорово, только так ли нужно?
Может вам есть смысл купить f4 discovery и сделать часть портов через мультиплексор? А уже в итоговом варианте напрямую пустить. А может и не потребуется ставить чип с 17+ ацп входами.. все таки не дешевое удовольствие, тем более вы гонитесь за стоимостью.
По другим интерфейсам и я и другие участники уже отвечали - та же дискавери закроет 95% всего, остальное можно и на костыле подсадить.
На счет звука путнего подсказать не могу - думаю тут есть более грамотные в этом вопросе, но сдается мне выбор по прежнему останется за одной из отладок аля f4disc
maxntf
Цитата(jcxz @ Mar 30 2016, 10:47) *
Сомневаюсь, что хотя-бы в одном из означенных МК найдёте столько ROM. Да и нафига она Вам?
Вот размер FLASH - другое дело.

PS: У Вас большие проблемы с терминологией. Вы путаете ОЗУ с FLASH (или чем-то другим), ROM с FLASH, видите указания на некие интерфейсы (I2C) которых нет.
Откройте любой учебник по МК - без знания основ никуда.
Даже помочь Вам сложно, ибо сложно понять, что Вам нужно.


ROM - я имею ввиду память программ.
Да что за люди, уже написал конкретный вопрос, а вместо помощи пытаются отписаться и показать себя умнее всех.
Вы когда объявляете константы вы пишете const rom int x или const flash int x?
Интуитивно можно понять что я имею ввиду.

Цитата(ЯadiatoR @ Mar 30 2016, 11:01) *
...
Может вам есть смысл купить f4 discovery и сделать часть портов через мультиплексор? ...

Так я собственно и спрашиваю discovery с каким из этих МК лучше выбрать?

АЦП нужно просто мерить входное напряжение (мультиметр)
Obam
Цитата
Цитата(maxntf @ Mar 29 2016, 20:44) *
Взять заведомо мощнее МК я боюсь напороться на невозможность непереносимости проекта на более простой МК (например с F4 на F0). Потому как пока еще не понимаю разницу между ними. Ну кроме явных параметров, таких как память и быстродействие. Может это как написать проект под PIC32 а потом пытаться его перенести на pic12


Характерный пример.
ТС, отметьте себе сразу - F0, F2, F3, F4 (больше того - все доступные ARM) - 32-разрядные со сходной архитектурой; ядра как братья близнецы.
Смело изучайте любое.

Цитата
Так я собственно и спрашиваю discovery с каким из этих МК лучше выбрать?


Вот любую! Освоите, а к тому времени и свой блок спроектируете.
jcxz
Цитата(maxntf @ Mar 30 2016, 14:05) *
ROM - я имею ввиду память программ.

ARM - это не PIC. Здесь единое адресное пространство. Вы этого толком не понимаете, поэтому и не видите многих путей решения Вашей задачи.
Программа в ARM может выполняться хоть из ROM хоть из FLASH хоть из ОЗУ. Также как и данные - могут находиться в любом месте.
Из этого следует например то, что для Ваших "аудио-файлов" возможно и не нужна SD-карта, а их можно просто включить в образ прошивки (вместе с кодом программы) и разместить во FLASH. Всё зависит от их размера.

Цитата(maxntf @ Mar 30 2016, 14:05) *
Вы когда объявляете константы вы пишете const rom int x или const flash int x?
Интуитивно можно понять что я имею ввиду.

Константы я объявляю: int const x;
Интуитивно из Ваших постов можно понять только, что Вам нужен учебник по Cortex-M wink.gif
maxntf
Цитата(Obam @ Mar 30 2016, 11:14) *
Характерный пример.
ТС, отметьте себе сразу - F0, F2, F3, F4 (больше того - все доступные ARM) - 32-разрядные со сходной архитектурой; ядра как братья близнецы.
Смело изучайте любое.
Вот любую! Освоите, а к тому времени и свой блок спроектируете.

Спасибо, собственно таких ответов я и ожидал!
Цитата(jcxz @ Mar 30 2016, 11:16) *
ARM - это не PIC. Здесь единое адресное пространство. Вы этого толком не понимаете, поэтому и не видите многих путей решения Вашей задачи.
Программа в ARM может выполняться хоть из ROM хоть из FLASH хоть из ОЗУ. Также как и данные - могут находиться в любом месте.
Из этого следует например то, что для Ваших "аудио-файлов" возможно и не нужна SD-карта, а их можно просто включить в образ прошивки (вместе с кодом программы) и разместить во FLASH. Всё зависит от их размера.

И Вам спасибо. И таких ответов хотелось.
Понятно что нужно детально изучать все доки. Но вначале нужно иметь грубое поверхностное представление. Почитать статьи, примеры, а потом получив базовое представление лезть в дебри.
RadiatoR
Цитата(maxntf @ Mar 30 2016, 11:05) *
Так я собственно и спрашиваю discovery с каким из этих МК лучше выбрать?
АЦП нужно просто мерить входное напряжение (мультиметр)


Вы путаете мультиплексор и мультиметр.
Мультиплексор вы можете использовать в качестве "тройника" для ваших аналоговых сигналов (если по параметрам проходят) если на плате не будет хватать аналоговых входов. Я лично не видел более 16.
AVI-crak
Цитата(maxntf @ Mar 30 2016, 16:05) *
Понятно что нужно детально изучать все доки. Но вначале нужно иметь грубое поверхностное представление.

Поиграйтесь кубиком от st, там есть все варианты, в том числе и уже готовые проекты для печаток от st - со всеми используемыми ногами (смотрите на свободные - они вам доступны).
http://www.st.com/web/catalog/tools/FM147/...2?sc=stm32cube#
RadiatoR
Не имея представления об ARM, в частности о процах от ст рыться в кубе бесполезное занятие. Имхо

самое простое уже описали - любая отладочная плата и миллион примеров на всю подряд переферию. Помигает светиком, запустит uart - большая часть вопросов к этому времени закроется.
den1s
по требованиям много каналов АЦП, памяти, USB и Cortex-M0 возможно подойдет новый атмеловский SAMC21. Например ATSAMC21J18A

Там 2 АЦП по 12 каналов и одно сигма-дельта АЦП на 3 диф-канала. USB host/device. Правда корпус на 64 ноги максимум.
В качестве бонуса - питание до 5.5В.

Вроде камни эти в продакшен пока не вышли, потому по цене не ясно. Но последнее время Атмелы свои кортексы делают конкурентными с СТМ32 по цене (например М4 оптом от Atmel дешевле STMF4). Камушек конечно навороченный, потому для М0 наверное дорог будет, но уж точно дешевле М4.

Отладку можно купить в России ATSAMC21-XPRO за весьма вменяемые $21
jcxz
Цитата(den1s @ Apr 1 2016, 22:03) *
Отладку можно купить в России ATSAMC21-XPRO за весьма вменяемые $21

Вменяемые? Мне тут на днях отладку на Nuvoton предлагали, который 300МГц и 64МБ внутри и LQFP и на плате куча разъёмов и дип-переключателей - судя по всему удобная плата.
И всего 10$ за отладку.
den1s
Цитата(jcxz @ Apr 1 2016, 21:18) *
Вменяемые? Мне тут на днях отладку на Nuvoton предлагали, который 300МГц и 64МБ внутри и LQFP и на плате куча разъёмов и дип-переключателей - судя по всему удобная плата.
И всего 10$ за отладку.

Нувотон трудно по цене перебить и камушки у них интересные встречаются часто. Но работать с ними в России тяжелова-то. Требуются большие объемы заявлять - по мелочи они не размениваются, документация под NDA.
jcxz
Документация вроде нормально к ним находится в инете. Глубоко правда не разбирался, но NUC970 Family Programming Guide (типа юзермануал) найти в инете можно.
den1s
Цитата(jcxz @ Apr 2 2016, 12:19) *
Документация вроде нормально к ним находится в инете. Глубоко правда не разбирался, но NUC970 Family Programming Guide (типа юзермануал) найти в инете можно.

Возможно, такая ситуация не со всеми семействами. Но, например, для NUC976 даташит распространяется под NDA. Ну и некоторые документы, возможно, можно найти благодаря "добрым людям", которые их выкладывают после получения.
jcxz
Цитата(den1s @ Apr 2 2016, 20:50) *
Возможно, такая ситуация не со всеми семействами. Но, например, для NUC976 даташит распространяется под NDA. Ну и некоторые документы, возможно, можно найти благодаря "добрым людям", которые их выкладывают после получения.

Вы читаете невнимательно. Я же пишу, что NUC970 Family Programming Guide находится за минуту. Это юзермануал с описанием периферии на всё семейство NUC97x.
Описание периферии правда (на поверхностный взгляд) не фонтан - у всяких NXP, STM и т.п. более объёмное описание.
maxntf
Продолжаем разбираться. Получил железо, просмотрел несколько уроков, помигал светодиодами, передал в UART. Все вроде не особо сложно, так как сотни примеров есть. Начал разбираться с чего же все начинается. Тут уже инфы меньше и полез смотреть в мануал. Просьба поправить меня если я что то не так понял:
- Все начинается с адреса 0000 0000 (собственно это регистр syscfg_memrmp), который принимает значения состояния штырьков boot;
- У него только младшие 2 байта, которые указывают с какого места продолжить загрузку;
- Есть 3 варианта flash, SRAM и System memory. Во Flash наша основная программа, в System memory заводской бутлоадер, а в SRAM может быть любая временная программа (возможно даже свой бутлоадер, пока еще толком не понял).
- Из Flash мы запускаемся когда мы выполняем основной алгоритм работы.
- Из System memory если хотим обновить прошивку (не совсем понятно зачем это нужно, на сколько я понял у него нет шифрования данных, то есть прошивка должна иметься открытая). Ну возможно для каких то целей отладочных и пригодится.
- Из SRAM мы не можем загрузиться с первого раза, так как в нем будет бяка после подачи питания. Нужно первый раз загрузится нормально, записать в SRAM код программы которую нужно выполнить из SRAM, программно установить syscfg_memrmp для загрузки из SRAM и выполнить программный reset.
RadiatoR
Адрес 0x00 не принимает никакого значения boot. Туда записывается указатель стека.
Зачем вы лезете в дебри, которые вам не нужны? Отработали переферию - делайте логику.

а вот уже на 2 слове идет адрес старта кода (и скорее всего это не main, а код инициализации тактирования. Создается что в кокосе, что в кейле)
maxntf
Цитата(ЯadiatoR @ Apr 4 2016, 17:12) *
Адрес 0x00 не принимает никакого значения boot. Туда записывается указатель стека.

Точно, спасибо. Не правильно перевел мануал, регистр SYSCFG как и положено находится в структуре регистров.
Цитата(ЯadiatoR @ Apr 4 2016, 17:12) *
а вот уже на 2 слове идет адрес старта кода (и скорее всего это не main, а код инициализации тактирования. Создается что в кокосе, что в кейле)

Этот адрес устанавливается по состоянию регистра SYSCFG (состояние ножки boot)?
esaulenka
Нет. Значение SYSCFG определяет, на какую область памяти будет отображаться адрес 0.
Т.е., выставляем в одно значение - и содержимое памяти по адресам 0x00000000 и 0x08000000 будет одинаковое (и так же одинаковым будут следующие N килобайт, цифирку за ненадобностью не помню). Выставляем другое значение - будут одинаковыми 0x00000000 и 0x20000000 и т.д.

Но вот правда - бросайте Вы эти глупости. Мне кажется, этим ремапом никто толком и не пользуется. Разве что штатный загрузчик, да отладчики в режиме "загружать код в RAM" (этакий быстрый режим отладки для маленьких программ, чтобы флеш каждый раз не стирать).
x893
Ремапом приходится пользоваться в STM32F0 серии так как нет VTOR
Все загрузчики используют
AVI-crak
Цитата(esaulenka @ Apr 5 2016, 02:33) *
Но вот правда - бросайте Вы эти глупости. Мне кажется, этим ремапом никто толком и не пользуется.


Ремамп - единственный корректный способ залить код в внешнюю sdram из внешней 25qxx, и запустить ну очень жирную прошивку в нативном режиме - с поддержкой отладки. А на новых чипах от st этот режим уже часть периферии - исполняется самостоятельно, без ручных бутов.
jcxz
Цитата(esaulenka @ Apr 5 2016, 01:33) *
Нет. Значение SYSCFG определяет, на какую область памяти будет отображаться адрес 0.
Т.е., выставляем в одно значение - и содержимое памяти по адресам 0x00000000 и 0x08000000 будет одинаковое (и так же одинаковым будут следующие N килобайт, цифирку за ненадобностью не помню). Выставляем другое значение - будут одинаковыми 0x00000000 и 0x20000000 и т.д.

Интересно - и как это тут все определили о каком именно МК автор ведёт речь? Что он имеет в виду под "Получил железо ..."?
И уже прямо кучу советов понадавали. И тоже непонятно - по какому именно МК советы.
Прям экстрасенсы одни вокруг...... laughing.gif
maxntf
STM32F407VG.
Как в программе выполнить reset?
В PIC можно было функцией RESET();
scifi
Цитата(maxntf @ Apr 5 2016, 12:06) *
STM32F407VG.
Как в программе выполнить reset?
В PIC можно было функцией RESET();

NVIC_SystemReset();
jcxz
Цитата(maxntf @ Apr 5 2016, 15:06) *
STM32F407VG.
Как в программе выполнить reset?
В PIC можно было функцией RESET();

Универсально (для любого МК) - через встроенный WDT.
scifi
Цитата(jcxz @ Apr 5 2016, 12:38) *
Универсально (для любого МК) - через встроенный WDT.

А ещё можно соединить GPIO и RESET и дёргать этот сигнал yeah.gif
jcxz
Цитата(scifi @ Apr 5 2016, 16:15) *
А ещё можно соединить GPIO и RESET и дёргать этот сигнал yeah.gif

Хех! Круче - соединить GPIO и ногу EN питающего LDO beer.gif
maxntf
Сейчас разбираюсь с юзерским бутлоадером. Почитал про систему прерываний Cortex, она кардинально от PIC отличается но в принципе все понятно. При старте мы сразу попадаем в прерывание Reset и из него уже выходим в нашу main().
Как все организовать я понял. Только не получается перенести вектор прерываний как в бутлоадере когда переходим к выполнению основной программы, так и в основной программе (ее ведь необходимо сместить выделив место под бутлоадер). Нашел пример бутлоадера, там для этих целей используется функция NVIC_SetVectorTable(). У меня в функциях NVIC файла core_cm4.h такой нет.
scifi
Цитата(maxntf @ Apr 5 2016, 16:32) *
Только не получается перенести вектор прерываний как в бутлоадере когда переходим к выполнению основной программы, так и в основной программе (ее ведь необходимо сместить выделив место под бутлоадер).

Ну нельзя же так. Правильные пацаны читают мануал на процессор (Cortex-M4, как я понял). Там английским по белому написано, что есть регистр VTOR (в стандартных заголовках обозначается SCB->VTOR). Не нужна функция, чтобы записать значение в регистр, это моветон.
maxntf
Вот два кода, первый бутлоадера, а второй моя программа. Так нужно делать?

Код
//В проекте бутлоадера
int main(void)
{
//Здесь код бутлоадера



//здесь переопределение адреса таблицы векторов прерываний
//и переход к выполнению основной программы
__disable_irq ();
__set_MSP( *(uint32_t*)(0x08001000) );
SCB->VTOR = 0x08001000;
(*(void(*)(void))( *(uint32_t*)(0x08001000+4) ))();
}

//В проекте с основной программой
int main(void)
{

SCB->VTOR = 0x08001000;//и в линкере проекта основной программы установить адресацию с 0x08001000

//Дальше код основной программы
}
scifi
Цитата(maxntf @ Apr 5 2016, 17:29) *
Вот два кода, первый бутлоадера, а второй моя программа. Так нужно делать?

Кому нужно?
Делать можно по-разному. Мне нравится немного по-другому.
Адрес таблицы векторов не обязательно менять в загрузчике - основная программа сама это может сделать.
Переход на основную программу мне нравится делать вот так:
Код
static const uint16_t jump2fw[] =
{
    0xF850, 0xDB04, /* LDR.W SP, [R0], #4   */
    0x6800,         /* LDR.W R0, [R0]       */
    0x4700,         /* BX R0                */
};
...
((void (*)(int))(1 + (int)jump2fw))(0x08010000);

Причём выполняю это действие сразу после сброса в самом начале Reset_Handler(), если установлен соответствующий флаг (запрос на переход в основную прошивку). При таком способе основная прошивка стартует со сброшенной периферией, что удобно.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.