|
50MS/s ADC, LPC4370 - да или нет? |
|
|
|
Sep 13 2015, 04:35
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Возникла задача: оцифровать аналоговый сигнал с частотой ~ 50MS/s, разрядности хватит 8бит. Режим измерения АЦП: кратковременный интервал (<100мкс). Обработка сложная не нужна, нужно батарейное питание. Поэтому думаю использовать МК на Cortex-M. Сначала думал АЦП-тракт построить на отдельном АЦП с параллельным выходом и завести поток на МК либо напрямую (если в МК найдётся подходящий интерфейс, чтобы повесить внешний АЦП с необходимой скоростью) либо через промежуточное FIFO для согласования скоростей (типа IDT72241). Но потом у NXP обнаружил LPC4370 - 3-ядерный МК с АЦП на 80MS/s. Вроде как раз то, что нужно! правда BGA и без флеши  (( Если его использовать, то схемотехника значительно упрощается и удешевляется. Да и наличие экономичного M0 очень подходит для батарейного питания (большую часть времени устройство будет находиться в ожидании, думаю в этом режиме держать включённым только одно M0-ядро). Но я не имею опыта работы с линейкой LPC43xx. Имею большой опыт работы с LPC17xx и с многоядерными OMAP. Есть здесь кто-то, кто имеет опыт с LPC43xx и конкретно - LPC4370? Имеется ряд вопросов: 1. Как организована работа JTAG с разными ядрами? Есть-ли возможность одновременной отладки через один J-Link всех ядер? Можно-ли управлять JTAGом ядрами независимо одно от другого (два стоят, третье - шагаем)? Есть-ли поддержка такой работы в IAR? 2. Насколько работоспособен ADCHS (высокоскоростной 12бит АЦП) в LPC4370? В LPC17xx сталкивался с проблемой большого шума втроенного АЦП, из-за которой на большой скорости с ним практически нереально работать. Нет-ли в ADCHS подобной проблемы??? PS: А может народ знает - имеются-ли другие МК со встроенным АЦП порядка 50MS/s?
|
|
|
|
|
Sep 14 2015, 08:48
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(jcxz @ Sep 13 2015, 07:35)  1. Как организована работа JTAG с разными ядрами? Есть-ли возможность одновременной отладки через один J-Link всех ядер? Можно-ли управлять JTAGом ядрами независимо одно от другого (два стоят, третье - шагаем)? Есть-ли поддержка такой работы в IAR? Я отлаживаю в Кейле (но собираю при помощи gcc). Там в настройках отладчика указывается, к которому ядру нужно цепляться через JTAG. Пробовал отлаживать M0, там приходилось подключаться к M4, запускать M0, потом подключаться к M0 и отлаживать. В общем, геморрой. Наверное, что-то из этого можно автоматизировать, но мне не нужно было. В качестве адаптера использую LPC-LINK 2 с прошивкой CMSIS DAP. Цитата(jcxz @ Sep 13 2015, 07:35)  2. Насколько работоспособен ADCHS (высокоскоростной 12бит АЦП) в LPC4370? В LPC17xx сталкивался с проблемой большого шума втроенного АЦП, из-за которой на большой скорости с ним практически нереально работать. Нет-ли в ADCHS подобной проблемы??? У меня пока до реальной работы с сигналами дело не дошло. Оцифровывал с небольшой скоростью, данные идут. На форуме LPCWARE видел упоминания шума. Где-то есть рекомендации по разводке, какие пины лучше не задействовать, чтобы меньше шумел АЦП. В крайнем случае можно останавливать ядра и/или переферию на время оцифровки. В общем, только жизнь покажет. Цитата(jcxz @ Sep 13 2015, 07:35)  PS: А может народ знает - имеются-ли другие МК со встроенным АЦП порядка 50MS/s? Я долго искал и ничего подобного больше нигде не видел. Более того, этот МК стоит в разы дешевле, чем скоростной АЦП, который в нём сидит.
|
|
|
|
|
Sep 14 2015, 11:03
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(scifi @ Sep 14 2015, 14:48)  Я отлаживаю в Кейле (но собираю при помощи gcc). Там в настройках отладчика указывается, к которому ядру нужно цепляться через JTAG. Пробовал отлаживать M0, там приходилось подключаться к M4, запускать M0, потом подключаться к M0 и отлаживать. В общем, геморрой. Наверное, что-то из этого можно автоматизировать, но мне не нужно было. В качестве адаптера использую LPC-LINK 2 с прошивкой CMSIS DAP. В IAR7.20 тоже вижу что в свойствах проекта можно выбрать или LPC4370_M0 или LPC4370_M4 - это ясно, это для какого ядра компилить данный проект. А в свойствах отладчика есть вкладка "Multicore", но она не активна. И есть чекбокс "Scan chain contains non-ARM devices", но не знаю что там нужно вписывать в поле "TAP number" и вкладка "Multicore", после установки этого чекбокса, не становится активной. У меня J-Link (и есть SAU510), но могу и другой купить какой нужен. А Вы не пробовали не отключаясь от M4, подключиться к M0? Я много работал с OMAP-L137, там 4 ядра, два из которых: ARM9 и DSP C674x. Так там просто: два отдельных проекта, но их можно независимо друг от друга коннектить каждый к своему ядру и, независимо от другого, управлять им (загружать прошивку, останавливать, запускать, шагать и т.п.). И всё это через один JTAG (SAU510) под CCS. Цитата(scifi @ Sep 14 2015, 14:48)  Где-то есть рекомендации по разводке, какие пины лучше не задействовать, чтобы меньше шумел АЦП. В крайнем случае можно останавливать ядра и/или переферию на время оцифровки. В общем, только жизнь покажет. Рекомендации я видел в даташите. В LPC17xx шум проявлялся в виде редких неожиданных провалов напряжения до максимального уровня или нуля. Такое ощущение что происходил сбой в АЦП, а не какие-то наводки. Вроде пробовал и останавливать - не помогало. Но в том проекте нужно было измерять постоянное напряжение, так что я делал много измерений, а потом убирал эти помехи медианным фильтром и вобщем это не проблема была. А в новой задаче необходимо оцифровывать поток быстроменяющихся данных на частоте 50МГц, там лишних замеров не сделаешь, ядро конечно можно остановить, но DMA должно работать. Цитата(scifi @ Sep 14 2015, 14:48)  Я долго искал и ничего подобного больше нигде не видел. Спасибо! Вы сэкономили мне кучу времени  Вы с режимами пониженного потребления в LPC4370 не разбирались? Как я понял из даташита, в sleep ядра можно переводить независимо друг от друга, но в более глубокие режимы - только целиком весь МК. Мне был бы оптимален режим работы в качестве основного ядра: M0-подсистема, а ядро M4 - в deep sleep (или более глубокий сон). А когда нужна работа с АЦП - включается M4, делает работу и опять уходит в deep sleep. Но вроде так невозможно  (((
|
|
|
|
|
Sep 14 2015, 11:34
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(jcxz @ Sep 14 2015, 14:03)  А в свойствах отладчика есть вкладка "Multicore", но она не активна. И есть чекбокс "Scan chain contains non-ARM devices", но не знаю что там нужно вписывать в поле "TAP number" и вкладка В Кейле совсем просто: при открывании свойств адаптера он сразу сканирует цепочку JTAG и предлагает выбрать в списке одно из трёх ядер. Цитата(jcxz @ Sep 14 2015, 14:03)  Я много работал с OMAP-L137, там 4 ядра, два из которых: ARM9 и DSP C674x. Так там просто: два отдельных проекта, но их можно независимо друг от друга коннектить каждый к своему ядру и, независимо от другого, управлять им (загружать прошивку, останавливать, запускать, шагать и т.п.). И всё это через один JTAG (SAU510) под CCS. Вот это я понимаю - софт для людей. Может быть, яры и кейлы подтянутся. А может и нет. Цитата(jcxz @ Sep 14 2015, 14:03)  А Вы не пробовали не отключаясь от M4, подключиться к M0? Пробовал. Там при старте запускается только M4, а M0 сидят в сбросе. Считается, что прошивка, исполняемая на M4, должна снять сброс с M0. Я пробовал подключиться отладчиком к M0 и дёрнуть соответствующий регистр, чтобы снять сброс, но ничего не вышло. Вывод такой: перед подключением отладчика к M0 нужно обеспечить отключение сброса M0. Цитата(jcxz @ Sep 14 2015, 14:03)  Вы с режимами пониженного потребления в LPC4370 не разбирались? Нет. Ни разу не приходилось экономить электроэнергию. Хотя у LPC4370 отключил тактирование ненужной периферии - уж очень заметно он греется.
|
|
|
|
|
Sep 14 2015, 11:55
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(scifi @ Sep 14 2015, 17:34)  Пробовал. Там при старте запускается только M4, а M0 сидят в сбросе. Считается, что прошивка, исполняемая на M4, должна снять сброс с M0. Я пробовал подключиться отладчиком к M0 и дёрнуть соответствующий регистр, чтобы снять сброс, но ничего не вышло. Вывод такой: перед подключением отладчика к M0 нужно обеспечить отключение сброса M0. Это понятно - можно в начале main() для M4 вывести M0 из сброса (и прошагнуть это место отладчиком). А можно то же самое сделать и конфигурационным файлом JTAG (.mac - файл в IAR). Я подобным образом для LPC1788 сделал отладку проекта во внешней SDRAM: в .mac-файле прописал инит EMC-контроллера, и J-Link стал нормально грузить и запускать прошивку в SDRAM. Это не проблема, также можно и вывести M0-ядро из ресета. Главное тут - чтобы при подключенном к JTAG одном IAR-проекте, была возможность открыть другой проект и подключить его к тому-же работающему JTAG. В CCS3.3 это решается промежуточной софтиной: вначале запускается "Parallel debug manager", он подключается к JTAG-эмулятору. А потом открываются проекты для ядер и они уже коннектятся к "Parallel debug manager". Цитата(scifi @ Sep 14 2015, 17:34)  Нет. Ни разу не приходилось экономить электроэнергию. Хотя у LPC4370 отключил тактирование ненужной периферии - уж очень заметно он греется. Я на LPC1758 экономил. Работа с периферией у меня была так сделана: включил нужную периферию, поработал с ней, затем - отключил её. И ПО так написано, что всё неиспользуемое время CPU находится в idle-процессе ОС выполняя команду WFE. Но отключение всей периферии и перевод в sleep-режим давали недостаточно экономии. Более глубокий сон там был невозможен (из-за задачи). Потом добавил ещё в интервалы длительной малой активности отключение PLL с переходом на IRC и выставлением максимального делителя частоты ядра ==256. Так удалось добиться требуемого уровня потребления. Здесь вроде есть для этого M0-подсистема - можно вроде больше сэкономить если-бы удалось выключить всё, что не входит в подсистему M0. Хотелось бы потребление МК порядка 2-3мА. При этом выполнение некоторых простых функций M0-ядром.
|
|
|
|
|
Sep 14 2015, 14:29
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(aaarrr @ Sep 14 2015, 17:08)  Даже всякие Cortex-M, занимающиеся управлением питанием в составе SoC'ов на Cortex-A, обычно не удостаиваются такого громкого именования. PRU - это, по-моему, все же периферия, хоть и программируемая Сказали бы просто "устройство в цепочке JTAG". Если уж начали спорить о значении слов, то, строго говоря, "ядро" - это IP корка, и в эту категорию входят и UARTы, и Ethernet MACи, и т.д. Какой-то умелец назвал процессор "ядром", и понеслось. Интел подлил масла в огонь, начав использовать для своих процов брэнд "Core"
|
|
|
|
|
Sep 14 2015, 14:35
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(scifi @ Sep 14 2015, 17:29)  Если уж начали спорить о значении слов, то, строго говоря, "ядро" - это IP корка, и в эту категорию входят и UARTы, и Ethernet MACи, и т.д. Какой-то умелец назвал процессор "ядром", и понеслось. Интел подлил масла в огонь, начав использовать для своих процов брэнд "Core" Ядро в данном случае сокращение от "вычислительное ядро".
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|