Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AT91SAM7X и LPC2388 - что выбрать?
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Александр Куличок
С АВР напрограммировался достаточно. Теперь хочу начать изучение/работу с ARM.
Остановился на 2х кристаллах - AT91SAM7X256 и LPC2388. В основном, из-за их доставабельности.
Предполагаю использовать ethernet и USB, с которыми тоже никогда не работал (wiznet+авр не в счет).

Остановился на 2х кристаллах - AT91SAM7X256 и LPC2388. В основном, из-за их доставабельности.
Собственно говоря, интересуют плюсы и минусы каждого из них в общем и в частности:
- максимальная производительность ethernet и USB - интерфейсов
- доступность бесплатных/самодельных средств программирования/отладки.

Есть еще целая туча вопросов, но это попозже.
Буду также благодарен за ссылки на литературу типа "ARM для чайников", где было бы описаны ньюансы работы с АРМ.
К примеру, дерганье ногами. В АВР все просто - sbi - и через такт-два единичка на выходе. А как в АРМе?
Что и как влияет на время выполнения команд? Можно ли добится от того же АТ91SAM7X линейного выполнения кода с максимальной частотой 55МГц, если скорость выборки из флеш "Up to 30 MHz". Вроде бы нельзя. Но может я чего-то не знаю? В общем, вопросов все больше и они только накапливаются при чтении даташитов.
aaarrr
Цитата(Александр Куличок @ Oct 20 2009, 18:38) *
Остановился на 2х кристаллах - AT91SAM7X256 и LPC2388. В основном, из-за их доставабельности.
Собственно говоря, интересуют плюсы и минусы каждого из них в общем и в частности:
- максимальная производительность ethernet и USB - интерфейсов
- доступность бесплатных/самодельных средств прграммирования/отладки.

LPC новее и, пожалуй, лучше. К Ethernet'у у SAM'а с моей стороны претензий не возникло, а вот USB не хватает DMA.
Осваивать можно любой, взвешивать все за и против нужно уже при выборе кристалла для конкретного применения.

Цитата(Александр Куличок @ Oct 20 2009, 18:38) *
К примеру, дерганье ногами. В АВР все просто - sbi - и через такт-два единичка на выходе. А как в АРМе?

Регистр в адресном пространстве и 3 такта на запись минимум.

Цитата(Александр Куличок @ Oct 20 2009, 18:38) *
Что и как влияет на время выполнения команд? Можно ли добится от того же АТ91SAM7X линейного выполнения кода с максимальной частотой 55МГц, если скорость выборки из флеш "Up to 30 MHz". Вроде бы нельзя. Но может я чего-то не знаю?

Можно выполнять критичные участки из RAM на полной скорости.
prottoss
Цитата(aaarrr @ Oct 20 2009, 22:49) *
...а вот USB не хватает DMA.
Размеры буферов конечных точек у SAMа мизерные, по этому, наверное DMA и не используется. Быстрее "в ручную" загрузить буфер конечной точки чем настраивать канал DMA каждый раз. Как там у филипка с этим, я не знаю.
aaarrr
Цитата(prottoss @ Oct 20 2009, 19:20) *
Размеры буферов конечных точек у SAMа мизерные, по этому, наверное DMA и не используется.

512 байт - не так уж и мало, особенно если учитывать, что вычитывать их приходится по одному.
evgen2
Цитата(Александр Куличок @ Oct 20 2009, 18:38) *
Остановился на 2х кристаллах - AT91SAM7X256 и LPC2388. В основном, из-за их доставабельности.
Собственно говоря, интересуют плюсы и минусы каждого из них в общем и в частности:
- максимальная производительность ethernet и USB - интерфейсов

вот сегодня научился обмениваться LPC2378 (стартеркитовская MLPC2378) с писюком по UDP:
~360 кб/сек при обмене сообщениями туда-обратно длиной 65 байт данных.
aaarrr
Через EMAC SAM7X @ 55MHz вполне получается протаскивать поток в 72Мбит/с (Full duplex, выход = вход с незначительными модификациями).
Но это значительно превышает возможности ядра по "осмыслению" полученной информации.
Александр Куличок
Спасибо.
Хотелось бы еще узнать, каков нужен минимальный набор для отладки и программирования кристаллов первом и втором случае.

И заодно следующая партия вопросов smile.gif

SAM-BA - это, как я понимаю, загрузчик кода для АТ91 контроллеров. Есть ли что-то похожее для NXP?

Вопрос по ДМА. (Далее привожу свои рассуждения и прошу меня поправить в местах, где я ошибаюсь)
Допустим, я хочу сделать 2-направленную передачу данных между четырмя перифериными блоками и памятью с высокой скоростью.
При этом ядро "делает что-то очень важное" ((с)Черновецкий - украинцы поймут smile.gif ), и отвлекатся ему нежелательно.
В случае с АТ91 я на каждый блок настраиваю ДМА и данные от периферийных блоков автоматически поступают в отведенное им место в ОЗУ (и оттуда же передаются). Это похоже на то, что каждому мериферийному блоку из общего объема ОЗУ выделили по 2 буфера FIFO (для приема и передачи). Причем размер этих буферов я задаю сам.

В случае с LPC это не пройдет, так как, на мой взгляд (как новичка), блок ДМА здесь довольно ограничен:
- Только 2 однонаправленных канала (выделенные ДМА под эзернет и ЮСБ не считаем)
- ДМА может создавать каналы:
GPDMA (2 однонаправленных канала):
1. между периферийным блоком на шине АРB и блоком памяти на 16кБайт на АНВ1
2. между периферийным блоком на шине АРB и внешней памятью
3. между внешней памятью и блоком памяти на 16кБайт на АНВ1
USB DMA - между памятью ЮСБ (4кБайт) и тем же блоком памяти на 16кБайт на АНВ1
ethernet DMA - между блоком ethernet и блоком памяти на 16кБайт на АНВ2, который, по сути, служит буфером эзернет. А передавать данные от эзернет во внешнюю память или на периферию можно только по одному.

Еще вопрос.
Что означает описание "reserved for the ARM processor exclusive use" к блоку памяти на 64к на local bus? то, что она недоступна по ДМА?

Про endpoint'ы ЮСБ.
Имеем 4 kB endpoint buffer RAM. Еndpoit'ов всего 32 (физических).
Т.е., память всех реализованных эндпойнтов нужно распределить так, чтобы их суммарный объем не превышал 4 кБайта?
aaarrr
Цитата(Александр Куличок @ Oct 21 2009, 01:30) *
Вопрос по ДМА. (Далее привожу свои рассуждения и прошу меня поправить в местах, где я ошибаюсь)
Допустим, я хочу сделать 2-направленную передачу данных между четырмя перифериными блоками и памятью с высокой скоростью.
При этом ядро "делает что-то очень важное" ((с)Черновецкий - украинцы поймут smile.gif ), и отвлекатся ему нежелательно.
В случае с АТ91 я на каждый блок настраиваю ДМА и данные от периферийных блоков автоматически поступают в отведенное им место в ОЗУ (и оттуда же передаются). Это похоже на то, что каждому мериферийному блоку из общего объема ОЗУ выделили по 2 буфера FIFO (для приема и передачи). Причем размер этих буферов я задаю сам.

Только нужно учитывать, что DMA сидит на той же шине, что и ядро, поэтому последнее будет "делать что-то очень важное" немного медленнее. Но в 99% случаев замедление не помешает нормальной работе.

В приведенном мной выше примере с двумя 72Мбит/с потоками было еще два 18Мбит/с потока наружу через SPI, и не могу сказать, что это как-то мешало.
zltigo
Цитата(Александр Куличок @ Oct 21 2009, 00:30) *
В случае с LPC ...

Все с точностью до наоборот, благодаря нескольким банкам памяти и нескольким шинам у LPC от DMA есть польза. В противном случае, контроллеру у которого захватили внешнюю шину делать почти нечего.


Цитата(Александр Куличок @ Oct 21 2009, 00:30) *
Хотелось бы еще узнать....

Очень-бы хотелось, что-бы Вы ознакомились с содержимым форума перед тем, как в мамнадцатый раз задавать дежурные вопросы. Тем более в основных ветках форума. Для начинающих есть специальный раздел - перенес.
aaarrr
Цитата(zltigo @ Oct 21 2009, 01:44) *
Все с точностью до наоборот, благодаря нескольким банкам памяти и нескольким шинам у LPC от DMA есть польза. В противном случае, контроллеру у которого захватили внешнюю шину делать почти нечего.

Это утверждение не соответствует действительности.
zltigo
Цитата(aaarrr @ Oct 21 2009, 01:11) *
Это утверждение не соответствует действительности.

smile.gif
Александр Куличок
2 zltigo
За перенос - спасибо. Просто не сразу нашел тему "для начинающих".
Цитата
В противном случае, контроллеру у которого захватили внешнюю шину делать почти нечего.

В случае обмена данными с одним периферийным блоком на большой скорости - согласен.
Я не знаю, сколько по тактам длится захват/освобождение шины ДМА, но на мой взгляд, одновремменый обмен данными с несколькими периферийными блоками на шине APB(допустим, 3 USART'а со скоростью 1Мбит/с) через 6-канальный ДМА (в АТ91) не должен захватывать шину надолго (что и подтрерждают слова aaarrr). LPC же позволяет реализовать только один полнодуплексный канал. Остальную периферию нужно будет облуживать по прерываниям. И это отнимет значительно больше времени у ядра LPC, чем блокировка внешней шины у АТ91. Хотя, с другой стороны, LPC имеет FIFO на периферии, что немного сокращает кол-во прерываний (у АТ91 я фифо не нашел. Может, плохо искал? хотя с персональным каналом ДМА фифо в нем нет необходимости).
Поправьте меня, если я в чем-то неправ.

P.S. Честно говоря, мне более симпатизирует LPC. Но хочется сразу узнать его слабые стороны. Пока что вижу две - это отсутствие полного MII и более слабое (по стравнению с АТ91) DMA.
zltigo
Цитата(Александр Куличок @ Oct 21 2009, 01:56) *
Пока что вижу две - это отсутствие полного MII

Это да, но есть LPC24xx smile.gif
Цитата
и более слабое (по стравнению с АТ91) DMA.

Это Вы просто с ним не работали и пока просто абстрактные разговоры разговариваете sad.gif и мечтаете о том, а неплохо-бы что-бы все DMA делало.
VslavX
Цитата(zltigo @ Oct 21 2009, 00:44) *
Все с точностью до наоборот, благодаря нескольким банкам памяти и нескольким шинам у LPC от DMA есть польза. В противном случае, контроллеру у которого захватили внешнюю шину делать почти нечего.

Именно у LPC23xx DMA убогонький - всего два канала - один отдаем на MMC/SD (is a must - без DMA этот блок не работает нормально), второй на USB - и все, остальная периферия курит без DMA в сторонке. Недаром же в новых LPC17xx добавили DMA-каналов.

Насчет разделения памяти на банки - оно тоже не без недостатков - память из этих "нескольких банков" работает медленнее основной SRAM - при доступе со стороны ядра мосты AHB вставляют свои несколько лишних тактов. Так что - так или иначе за доступ к данным надо платить - или отдавать шину в процессе обмена (как в SAM7X) или ждать на мосту потом при обращении к ним (LPC23xx). ИМХО, очень правильно атмеловцы сделали в новых SAM3 - там и банки памяти разделены и шина многослойная.

А вообще - однозначно выбрать из LPC23/SAM7X сложно - надо внимательно на задачу смотреть. Все ниженаписанное - ИМХО, по плотному опыту работы с обоими кристаллами.

1. На уровне печатной платы - LPC23 предпочтительней - у него одно питание, SAM7 требует двух - сложнее трассировка. С другой стороны, если задача очень критична к потреблению в рабочем режиме - то оптимизировать источник питания ядра 1.8 - самое оно.

2. По моим впечатлениям LPC23 раза в полтора прожорливей чем SAM7 (на одинаковых частотах, частота периферии = частоте ядра) в активном режиме. "В спячке" LPC23 сливает полностью - 150uA это даже неприлично как-то. SAM7 в спячке сильно выигрывает даже с ежесекундной калибровкой RC-часов - 30uA.

3. Угу, в LPC23 есть нормальные RTC - это большой плюс для некоторых задач. В SAM7X часики приходится делать на RC-генераторе - достаточно геморройно. С другой стороны - во многих ревизиях LPC есть чудный баг с VBAT - при массовом производстве он очень "радует" sad.gif

4. LPC23 быстрее чем SAM7 - тут и технология 128-битной выборки из программного флеша и частота ядра больше. В SAM7X имеется только одна PLL, и если используется USB то максимальная частота ядра ограничивается 48МГц. В LPC23 этой проблемы нет - для ядра стоит отдельная PLL. При некоторых условиях абсолютный выигрыш по быстродействию достигает двух раз (LPC23@72MHz <-> SAM7X@48MHz, режим ARM).

5. Ядро LPC23 не генерирует исключения при обращении по невыравненному адресу - это минус, особенно для новичков.

6. DMA в LPC23 ограниченный - мало каналов, не со всей памятью работает. Но для многих задач достаточный. Наличие USB DMA - приятно, хотя полезность под вопросом - как и полезность всех PDC в SAM7. Но опять-таки - это все от задачи зависит.

7. Оперативной памяти в SAM7X может быть до 128K и, при желании, хоть всю ее можно отдать для буферов обмена EMAC. В LPC23 - для EMAC доступно максимум 16+16, да еще и с USB делиться иногда надо sad.gif.

8. Работа с программной flash в LPC23 закрыта и намного менее удобна чем в SAM7 - особенно если в этой флешки хранить изменяемые настройки. Мелкие страницы SAM7 часто более предпочтительны. Заводской загрузчик LPC23 занимает часть флеши, имеет логические ловушки - это минус.

9. LPC23 UART может иметь дробный делитель скорости обмена - приятная возможность для достижения высоких стандартных скоростей обмена.
С другой стороны, UART SAM7 имеет очень много дополнительных возможностей - я свои протоколы RS-485 смог реализовать только на одном UART, на всех остальных процессорах (включая LPC23) пришлось задействовать дополнительный таймер.

10. Ethernet - у LPC23 только RMII - требуется внешний генератор 50МГц, у SAM7X - только MII (RMII не работает), генератор не нужен (кварца на PHY достаточно) но, с другой стороны, ножек больше уходит.
aaarrr
Цитата(zltigo @ Oct 21 2009, 02:50) *
smile.gif

Да-да, для эффективной работы DMA нужна N-слойная матрица AHB и кэшированный процессор, так что LPC с его двумя шинами и двумя банками памяти нервно курит в сторонке.

Вы как-то упорно игнорируете тот факт, что речь идет о маленьких процессорах с относительно медленной (100+100МБит/с максимум) периферией. Ну не способна она так уж совсем отнять у ядра шину.

Цитата(Александр Куличок @ Oct 21 2009, 02:56) *
Я не знаю, сколько по тактам длится захват/освобождение шины ДМА, но на мой взгляд, одновремменый обмен данными с несколькими периферийными блоками на шине APB(допустим, 3 USART'а со скоростью 1Мбит/с) через 6-канальный ДМА (в АТ91) не должен захватывать шину надолго (что и подтрерждают слова aaarrr).

Запись/чтение слова занимают 1/2 такта соответственно. Правда есть некоторые моменты.
zltigo
Цитата(VslavX @ Oct 21 2009, 14:05) *
Именно у LPC23xx DMA убогонький - всего два канала

Убогенький и Мало две большие разницы. Функционал даже GPDMA вполне на уровне, не говоря об эффективных специализированных.
Цитата
Насчет разделения памяти на банки - оно тоже не без недостатков - память из этих "нескольких банков" работает медленнее основной SRAM - при доступе со стороны ядра мосты AHB вставляют свои несколько лишних тактов.

Ну в реальности не чувствуется совсем.
Цитата
в новых SAM3

мы что обсуждаем? Для того, что выросло из ARM7 эффект велик.
Цитата
А вообще - однозначно выбрать из LPC23/SAM7X сложно

Вообще-то очень просто - для общего круга задач - LPC. Это просто mainstream на сегодняшний день. На какой-то узко-конкретной, естественно, может очень порадовать какой-либо отдельный нюанс, типа обойтись без 50MHz генератора, или наворот на UART под бессмертный 485, или.... Но как наиболее сбалансированный - LPC. Начинать с него.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.