Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: проблема в J-LINK или at91sam7s64
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
max_mart
Всем привет.

Решил Сам собрать себе дисковери кит на базе at91sam7s64-ek. Подарили мне китайский J-Link 8 c прошивкой 3.20. Недолго думая я посетил сайт производителя SEGGER и скачал от туда версию 4.76е. Пере прошил проггер на эту версию с новым серийником. Использовал кейген для лицензий (установились все кроме GDBserver). Использую IAR ARM 6.3, ОС - Windows 7 ultimate. Пробовал зашить его и включить debug, но выдал ошибку по RDI, перезагрузил программатор и плату, потом выдал ошибку: BAD JTAG communication write to IR: expected 0x1, got 0x0 <TAP command : 15> @ off 0x5. Потом опять перезагрузил, но выдало уже FAiled to measure total IRlen. И так замкнутый круг.

Запустил J-link arm консоль.
Выдал:
VTARGET: 3.31 V
IRLEN: 04, IRPrint 0x1, ARM7TDMI CORE

Значит проц то J-LINK видет. НО!!!!

Запускаю команду testwspeed на скорости 100 кГц. И выдает Write test failed. Пробую testcspeed - выдает NO RAM available @ address 0x0. Пробовал на скоростях от 10 кГц и выше
Опять перезагружаю все вместе с программой J-link arm , но выдает уже IRLEN: 04, UNKNOWN DEVICE.
Опять перезагружаю. Появляется IRLEN: 04, IRPrint 0x1, ARM7TDMI CORE, выставляю скорость в 4 кГц, выдает BAD JTAG communication...

Со стороны своей платы все прозвонил - ничего не замыкает, все ножки правильно подключены к J-LINK. Все необходимые линии подтянуты, как на схеме ATmel.
Пробовал и с JTAG_SEL играть - резистором 5 кОм на + и на -. На плюс подтягивал - совсем не работало. На минус - работало. По описанию по идее там внутренняя подтяжка 15 кОм
на землю. Так что я думаю это излишне.
Со стороны J-LINK не припаял только nTRST - потому что некуда.

Не могу понять в чем дело. Народ, пожалуйста, подскажите где и куда копать? В чем проблема может быть?

Заранее спасибо.
Raven
Возможно, что у вас проблема, аналогичная описанной здесь
Spartan-6 и китайский клон USB кабеля

На эту мысль наводит факт, что у вас J-Link ARM console видит чип, т.е., энумерация устройств в JTAG-цепочке проходит нормально, но последующие операции терпят крах. Вкратце - проблема заключалась в плохом контакте линии TDI (где-то на переходнике между USB кабелем и разъемом на плате).
max_mart
Спасибо огромное за мысль!!!

Я ведь тоже китайский переходник с 20-pin разъема на другие разъемы использую!!!

Надо будит разобраться с ним. fman.gif

Еще момент нашел статью одну про китайских J-LINK, пишут что ставить версию SEGGER J-LINK надо не больше 4.24, а у меня 4.76е. Стоит ли делать downgrade, если он меня хоть как то дышит?
Raven
Цитата(max_mart @ Sep 30 2013, 22:04) *
Еще момент нашел статью одну про китайских J-LINK, пишут что ставить версию SEGGER J-LINK надо не больше 4.24, а у меня 4.76е. Стоит ли делать downgrade, если он меня хоть как то дышит?

Про такие тонкие моменты J-Link'ов ничего не могу сказать. Но если знаете, как делать не только downgrade, но и upgrade, и вообще, как восстановить состояние - то почему не попробовать все варианты?
max_mart
Делал и апгрейд и даунгрейд - тоже самое. Попробую заново свой КИТ сваять. И кстати сейчас уже жалуется, что TDO все время на выс. уровне и проц. совсем видеть перестал
Raven
Ну, раз не получается методом научного тыка, пора, наверное, применить метод научного анализа sm.gif

А именно - начать постепенную локализацию проблемы. Для начала определить - это проблема платы, или USB кабеля. У вас есть возможность проверить JTAG-цепочку на плате с помощью какого-нибудь заведомо работающего широко распространенного JTAG-кабеля с бесплатной поддержкой низкоуровневой JTAG-отладки (Altera: ByteBlaster, USB Blaster; Xilinx: ParallelCable или Platform Cable)? Так можно было бы проверить сторону платы.
max_mart
Спасибо большое за ответы и желание помочь. Я раньше все время только с пиками, да с аврками и иксмегами работал только и беды не знал. А вот сейчас нужна мощь и проблемы пошли. Да и этих армов в запасе около 40 штук. Вот и решил начать грызть гранит науки ARM.

нету. имеется ввиду, тот который работает от LPT? У меня ведь и LPT, то нету.

У меня вот, что недавно получилось:

Написал пробную программу для at91sam7s64 в IAR ARM 6.30 , чтобы узнать в чем дело. Значит ситуация следующая:
1) Проект отканфигурирован под дебаггер RDI j-link 8, настройки linker - at91sam7s64.icf. Output converter - поставил создать дополнительный binary файл. Почему после компиляции этот файл весит 1 кб, а другой файл .out 32кб?
Когда нажимаю download and debug, то вылазиет ошибка Failed to measure CPU clock frequency, но почему-то в отладку заходит после нажатия ОК. Что это может значить? При этом, если я использую J-link commander, то он выдает ту же ошибку TDO constant high!!!
2) Пробовал через SAM-BA 2.12 прошить. Сначала выполнил команду Eraseall. Затем попытался загрузить, создавшийся .bin в ARM. Операция прошла успешно. Но запрограммированные функции не выполняются. Правильно ли я зашиваю? Почему bin весит 1 кб.?
Поэтому и возникают выше пречисленные вопросы. Помогите, пожалуйста, найти на них ответы.

Для PLL выставил 1.5 кОм, 1нФ, 10 нФ, как в ките. НО!!!

Не понятный момент: PLL, если высчитывать по атмеловскому калькулятору, то при делителе 5 и умножителе 25 (как в шаблоне проекта) = ~92,16 MHz. И нужно поставить якобы 874 Ом, 11нФ, 1нФ

Как это понимать? На что ссылаться?
Raven
Цитата(max_mart @ Oct 5 2013, 18:50) *
нету. имеется ввиду, тот который работает от LPT? У меня ведь и LPT, то нету.

Жаль. ByteBlaster - на LPT, USB Blaster - на USB. В принципе, можно и другие JTAG кабели использовать, лишь бы была уверенность в их 100% работоспособности, и софтина была бы, которая умеет с ними работать и дает доступ к низкоуровневым операциям с JTAG - например такая, как open source'ная Universal JTAG (UrJTAG).

По работе с Atmel ARM'ами я не советчик - у меня до них руки не доходили пока. Разве что-нибудь замечу из самых общих инженерных соображений - это пожалуйста.

Цитата(max_mart @ Oct 5 2013, 18:50) *
1) Проект отканфигурирован под дебаггер RDI j-link 8, настройки linker - at91sam7s64.icf. Output converter - поставил создать дополнительный binary файл. Почему после компиляции этот файл весит 1 кб, а другой файл .out 32кб?

Из того, что я знаю, .out файл и есть исполняемый файл. А что за binary файл размером 1 кБ? Объектник? Если так, то понятно, откуда разница - библиотеки прилинковались, скорее всего.

Цитата(max_mart @ Oct 5 2013, 18:50) *
При этом, если я использую J-link commander, то он выдает ту же ошибку TDO constant high!!!

Похоже, у вас все-таки есть какие-то низкоуровневые проблемы. Точнее не скажешь пока. То ли железка имеет проблему, то ли firmware не совсем корректно что-то делает.... Я бы присмотрелся к этому коммандеру, изучил бы документацию на него. Судя по всему, он как раз мог бы помочь с низкоуровневой отладкой JTAG соединения с target'ом. Наверняка там есть что-то типа команды, в цикле производящей считывание ID чипов в JTAG цепочке, или еще что-то в этом роде. Это было бы большим подспорьем. Хорошо бы после изучения документации опробовать кабель на 100% работающем устройстве (неважно, с каким чипом - лишь бы его ID был известен).
Genadi Zawidowski
1) стереть процессор пином ERASE
2) что за кварц на процессоре стоит? Поставить не сильно высокочастотный (8..18.432). Убрать конденсаторы с него.

В таком состоянии НЕ ШИТЬ ничего, а погонять те самые тесты из J-LINK COMMANDER
max_mart
Всем Привет.

Проблема решилась.

Дeло оказалось в PLL. И очень странная ситуация: Сначала использовал обвеску из 1.5 кОм, 1 нФ, 10 нФ с настройками PLL: делитель 5, умножитель 25, PLL_counter 28 (845 мкС). Это не работало. Скачал программу калькулятор PLL. И оказалось совсем другое, что резистор нужен не 1.5 кОм, а 1 кОм, а для конденсаторов 1 нФ и 10 нФ, нужно выставить делитель не 25, а 23. Заработало, но с глюками. Выставил PLL_counter 33 (1000 uS) - глюки пропали.

Почему такая разница??? В чем кроется подвох?

Программирую через SAM-BA. Почему-то, если не отключусь от PA16 (ножка для SAM-BA), то может не запуститься ARM, а может и заработать моя прошивка. В чем может быть причина?

Да и почему-то не обрабатывает одновременное нажатие 2-х кнопок и даже не инициализируется процессор. Но это лишь в том случае, если этот код используется (не закомментирован). А когда я его комментирую, то проблем нет и я их использую по отдельности. процессор инициализируется.

Код:

CODE
#define button3 ((m_pPio->PIO_PDSR)&(BIT27|BIT28)) // 27, 28 - ноги

void delay (volatile unsigned long int a) { while (--a!=0); }

int main (void) {
...
while (1) {
...
if (!button3) {
delay(10000)
if (!button3!) {
setLED1;
delay(1000000);
clearLED1;
setLED2;
delay(1000000);
clearLED2;
while (!button3);
}
};
}
}
Данным способом я уже давно пользуюсь, но только на 8 битках и он работает на УРА. В чем может быть проблема?

Заранее спасибо

Забыл указать, что среда программирования IAR ARM 6.30
DmitryM
Цитата(max_mart @ Oct 14 2013, 20:42) *
Проблема решилась.
Дeло оказалось в PLL. И очень странная ситуация


Я бы посоветовал подробнее поизучать инициализацию PLL. Очень часто встречается, когда в PMC_MCKR одной операцией заносится и новый источник тактирования (CSS) и новый прескалер (PRES) при переходе со Slow clock на PLL clock. Неоднократно наблюдал, когда контроллер впадает в ступор и наблюдаются всякие чудеса. После переделки (сначала PRES, MCKRDY, потом CSS, MCKRDY) неработоссобная плата начинала вести себя адекватно и подвисаний не замечено.

ЗЫ. И симптомы похожие: то запустится через 2 минуты, то сразу. Меняя элементы PLL, топологию разводки кварца, как будто наступает улучшение, но при длительном тестировании все равно наблюдаются подвисания, так что посмотрите как у Вас идет инициализация.
max_mart
Кварц стоит на 18.432 МГц, но обвязка из конденсаторов не по 15 пФ, а по 12 пФ. Но я не думаю, что они могут влиять так. Или я не прав?

Да и 2 танталовых конденсатора по 10 мкФ по питанию ядра и регулятора напряжения. Но по идее это тоже не должно влиять. На осциллографе помех и искажений по питанию не наблюдал.
Raven
В каких-то случаях и это может иметь значение. Но DmitryM дал хороший совет - проверьте, какая у вас последовательность записи в регистры настройки PLL.
RabidRabbit
Цитата(max_mart @ Oct 14 2013, 21:40) *
Данным способом я уже давно пользуюсь, но только на 8 битках и он работает на УРА. В чем может быть проблема?

Традиционный вопрос - тактирование PIO контроллера включено?
max_mart
Да. Тактирование контроллера перефири (PIO) включено.

p_pPMC->PMC_PCER = 1 << AT91C_ID_PIOA;

SavageForest
Цитата(max_mart @ Oct 15 2013, 16:43) *
Да. Тактирование контроллера перефири (PIO) включено.
p_pPMC->PMC_PCER = 1 << AT91C_ID_PIOA;

Для PLL лучше брать точный резюк (1%) и хорошие кондёры (NPO). по номиналам 1к, 1000пФ, 10нФ (как и было указано)
Кварц юзаю на 24МГц (максимально возможная частота) дабы не шибко сильно зависеть от PLL цепочки и не нагружать ее высокими множителями/делителями.
я обычно начинаю инициализацию МК следующим образом:
в маине первые строчки после объявления переменных (если они есть) пишу:
*AT91C_RSTC_RMR |= (AT91C_RSTC_URSTEN | 0xA5000000); // RSTC_SetUserResetEnable(1);
PIO_InitializeInterrupts(0);
функция PIO_InitializeInterrupts() взята из стандартного Атмеловского pio_it.c

а вот так выглядит у меня lowlevelinit.c (слегка модифицировал стандартный):
CODE
#include "board.h"
#include "board_memories.h"
#include <pmc/pmc.h>

#ifdef MCK24 // 24 MHz
//#define B_MUL 24
#define B_MUL 24
#define B_DIV 6
#endif

#ifdef MCK12 // 12 MHz
//#define B_MUL 24
#define B_MUL 24
#define B_DIV 3
#endif

#ifdef MCK18 // 18.432 MHz
#define B_MUL 75
#define B_DIV 14
#endif

#ifdef MCK16 // 16 MHz
#define B_MUL 24
#define B_DIV 4
#endif
//------------------------------------------------------------------------------
// Internal definitions
//------------------------------------------------------------------------------
// Startup time of main oscillator (in number of slow clock ticks).
#define BOARD_OSCOUNT (AT91C_CKGR_OSCOUNT & (0x80 << 8))

// USB PLL divisor value to obtain a 48MHz clock.
#define BOARD_USBDIV AT91C_CKGR_USBDIV_1

// PLL frequency range.
#define BOARD_CKGR_PLL AT91C_CKGR_OUT_0

// PLL startup time (in number of slow clock ticks).
#define BOARD_PLLCOUNT (16 << 8)

// PLL MUL value.
#define BOARD_MUL (AT91C_CKGR_MUL & (B_MUL << 16)) // 72

// PLL DIV value.
#define BOARD_DIV (AT91C_CKGR_DIV & B_DIV) // 14

// Master clock prescaler value.
#define BOARD_PRESCALER AT91C_PMC_PRES_CLK_2

//------------------------------------------------------------------------------
// Internal functions
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
/// Default spurious interrupt handler. Infinite loop.
//------------------------------------------------------------------------------
void defaultSpuriousHandler( void )
{
while (1);
}

//------------------------------------------------------------------------------
/// Default handler for fast interrupt requests. Infinite loop.
//------------------------------------------------------------------------------
void defaultFiqHandler( void )
{
while (1);
}

//------------------------------------------------------------------------------
/// Default handler for standard interrupt requests. Infinite loop.
//------------------------------------------------------------------------------
void defaultIrqHandler( void )
{
while (1);
}

//------------------------------------------------------------------------------
// Global Functions
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/// Performs the low-level initialization of the chip. This includes EFC, master
/// clock, AIC & watchdog configuration, as well as memory remapping.
//------------------------------------------------------------------------------
void LowLevelInit(void)
{
unsigned char i;

// Set flash wait states in the EFC
// 48MHz = 1 wait state
#if defined(at91sam7s512)
AT91C_BASE_EFC0->EFC_FMR = AT91C_MC_FWS_1FWS;
AT91C_BASE_EFC1->EFC_FMR = AT91C_MC_FWS_1FWS;
#else
AT91C_BASE_MC->MC_FMR = AT91C_MC_FWS_1FWS;
#endif

// Initialize main oscillator
AT91C_BASE_PMC->PMC_MOR = BOARD_OSCOUNT | AT91C_CKGR_MOSCEN;
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MOSCS));

// Initialize PLL at 100MHz and USB clock to 50MHz
AT91C_BASE_PMC->PMC_PLLR = BOARD_USBDIV | BOARD_CKGR_PLL | BOARD_PLLCOUNT
| BOARD_MUL | BOARD_DIV;
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_LOCK));

// Wait for the master clock if it was already initialized
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY));

// Switch to slow clock + prescaler
AT91C_BASE_PMC->PMC_MCKR = BOARD_PRESCALER;
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY));

// Switch to fast clock + prescaler
AT91C_BASE_PMC->PMC_MCKR |= AT91C_PMC_CSS_PLL_CLK;
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY));

// Initialize AIC
AT91C_BASE_AIC->AIC_IDCR = 0xFFFFFFFF;
AT91C_BASE_AIC->AIC_SVR[0] = (unsigned int) defaultFiqHandler;
for (i = 1; i < 31; i++) {

AT91C_BASE_AIC->AIC_SVR[i] = (unsigned int) defaultIrqHandler;
}
AT91C_BASE_AIC->AIC_SPU = (unsigned int) defaultSpuriousHandler;

// Unstack nested interrupts
for (i = 0; i < 8 ; i++) {

AT91C_BASE_AIC->AIC_EOICR = 0;
}

// Enable Debug mode
AT91C_BASE_AIC->AIC_DCR = AT91C_AIC_DCR_PROT;

// Watchdog initialization
AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS;

// Remap the internal SRAM at 0x0
BOARD_RemapRam();

// Disable RTT and PIT interrupts (potential problem when program A
// configures RTT, then program B wants to use PIT only, interrupts
// from the RTT will still occur since they both use AT91C_ID_SYS)
AT91C_BASE_RTTC->RTTC_RTMR &= ~(AT91C_RTTC_ALMIEN | AT91C_RTTC_RTTINCIEN);
AT91C_BASE_PITC->PITC_PIMR &= ~AT91C_PITC_PITIEN;
}

первым делом выбираю нужный мне кварц и настраиваю МК под него так, чтобы работал на частоте 48МГц. Почему 48? на других частотах USB не запилится. При желании можно догнать до документированных 55, если USB не нужен. делители можно поперебирать, но в таком случае нужно будет и менять PLL цепочку (см. ATMEL_PLL_Filter_CALCULATOR_AT91_CAP_2v91.xls). я не заморачиваюсь и работаю с тем, что есть.
ЗЫ: если кто найдет ошибку или покритикует код - буду благодарен.
max_mart
SavageForest. Каким комптлятором пользуешься? И какой линкер используешь?

У меня j-link заработал и пошла отладка как положено. Но не долго мнет пришлось радоваться.
Выяснилось по ходу дебагинга, что проблема нажатия двух была в 3 ошибках:
the stack pointer for stack "CSTACK" (corrently 0x00000000) is outside the stack range (0x00200050 to 0x00200450)
the stack pointer for stack "IRQ_CSTACK" (corrently 0x00000000) is outside the stack range (0x00200050 to 0x00200450)
the stack pointer for stack "FIQ_CSTACK" (corrently 0x00000000) is outside the stack range (0x00200050 to 0x00200450)

Решил добавить инициализацию и передачу данных по юуарт и АЦП.
2 ошибки показала:
the stack pointer for stack "IRQ_CSTACK" (corrently 0x00200450) is outside the stack range (0x00200460 to 0x00200460)
the stack pointer for stack "FIQ_CSTACK" (corrently 0x00200450) is outside the stack range (0x00200460 to 0x00200460)

Линкер использую нестандартный - at91sam7s64.icf. Настройки см. в фотографии.

Со стандартным IARовским линкером вообще работать не хочет!!!

Что может служить проблемой? Где к роится подводный камень?
max_mart
Все правильно проблема была в startupe. Все работает как часы!!! sm.gif)

Сейчас я юзаю прерывания и т.д. и т.п.

Есть какой-нибудь пример или библиотека по использованию HID для обмена данными с компом? И смогу ли я использовать этот пример с программами, написанными с использованием библиотеки JvHID (jedi) для dcelphi?

есть ли статья в интернете или посты на форуме о написании драйвера на комп для USB устройства и как обмениваться данными с устройством, не HID?
SavageForest
Цитата(max_mart @ Oct 16 2013, 21:25) *
SavageForest. Каким комптлятором пользуешься? И какой линкер используешь?
Юзаю Кейл 4.00 бета3.1 с МДК3.5 и RLARM3.5...
все что нужно уже в комплекте, и линкер, и компиллер.. все ЕХЕшки в комплекте (ARMcc, ARMasm, ARMlink, ARMar ver4.0.0.525[eval]). линк файл стандартный.
компилится влёт и никаких проблем с китайским J-Link'ом или с оригинальным SAMICE замечено не было. все шьется и дебагится без проблем.
если нужно, можете взять это "безобразие" тут (~130МБ). стандартные примеры тут(~40МБ), может быть полезно. будет доступно в течение нескольких дней, потом удалю.
max_mart
Поробовал я bulkusb с проектом AVRx51 - windows xp распознал устройство, я задал путь к дарайверу для его установки. Как только установка дошла до конца, компьютер вместо того, чтобы успешно завершить установку драйвера, перезагружается. Драйвер в итоге установлен неправильно - устройство распознается, как неизвестное.

на windows 7 устройство вообще не только не распознается. но и сразу автоматически устанавливается, как неизвестное, в дальнейшем драйвер обновить невозможно.

Настройки не менял. Размер входной и выходной конечной точки по 64 байта (0х40).

В чем может быть пролема и как ее решить? Где кроится подводный камень

Еще вопрос: как можно переписать *.inf под себя и изменить название устройства при первом его подключении к компьютеру?
SavageForest
Цитата(max_mart @ Oct 23 2013, 14:49) *
на windows 7 устройство вообще не только не распознается. но и сразу автоматически устанавливается, как неизвестное, в дальнейшем драйвер обновить невозможно.
могу посоветовать попробовать слелать так:
прогой usbview смотрим VID и PID устройства, которое цепляется и вбиваем его в соответствующие поля FTClean указав в чекбоксе Other. я так систему чистил от подцепленных девайсов для проверки подписанных драйверов, вроде-бы работало.
max_mart
Всем привет.

Для работы c USB использую библиотеку и пример usb-device-cdc-serial-project. Инициализация устройства проходит успешно, установка драйвера тоже, присваивается номер виртульному COM порту - 9.
Для приема и передачи данных использую ф-ии:
CDCSerialDriver_Write(&buf0_1,sizeof(buf0_1),0,0) и CDCSerialDriver_Read(usbBuffer,DATABUFFERSIZE, (TransferCallback) UsbdataReceived).
Отправляю данные в компьютер ф-ей .._write.
В компьютере для чтения использую программу RealTerm с настройками - 9 порт, 115200, 8бит, 1 стоп, noparity. Теже самые настройки и при инициализации CDC в устройстве.

только почему-то на компьютере я ничего не получаю и не вижу. Пробовал на Delphi 7 сделать это ф-ей onRxChar - тоже ничего не принимает.
В чем может быть проблема?

Все заработало. Перезагрузил комп и заработало. И читает и передает.)))

НО!!!

Атмеловский проект для инициализации lowlevel использует для PLL умножитель 72, делитель 14. Общая частота 18432. Если использовать калькулятор для расчета значений фильтра PLL получаем: 3 кОм, 3.2 нФ, 320 пФ. и выдается предупреждение: "Вы используете быструю PLL реакцию", "попытайтесь снизить параметр полосы пропускания Fn PLL." У меня на плате стоит: 1 кОМ, 10 нФ, 1 нФ. Частота/2 по этому калькулятору получается кстати не 48 МГц, а 47.5 МГц.

И предстовляете!!! Это работает!!!

Если я поставлю настройки, соответствующие моей обвеске, рассчитанные по калькулятору: делитель 5, умножитель 24. Частота/2 получается - 42.4 МГц.

То это нифига не работает. USB наотрез не хочет инициализироваться, а так все ост.(перефирия, т.д.) инициализируется.

Вопросы:
1) Почему мое устройство работает с атмеловскими настройками, хотя по всем расчетам не должно? Почему PLL себя так ведет?
2) Почему USB не инициализировался с моими настройками?

Заранее спасибо.
max_mart
Максимальная скорость 256000 бит/с. Что надо сделать чтобы скорость стала 1 МБ/с?
SavageForest
Цитата(max_mart @ Oct 28 2013, 16:45) *
Атмеловский проект для инициализации lowlevel использует для PLL умножитель 72, делитель 14. Общая частота 18432. Если использовать калькулятор для расчета значений фильтра PLL получаем: 3 кОм, 3.2 нФ, 320 пФ. и выдается предупреждение...
1 кОМ, 10 нФ, 1 нФ. Частота/2 по этому калькулятору получается кстати не 48 МГц, а 47.5 МГц.
И предстовляете!!! Это работает!!!
и не мудрено. USB ,будет работать только тогда, когда внутренняя частота МК (BOARD_MCK) = 48 МГц. иначе USB просто не сможет синхронизироваться с хостом и будет вечно ожидать энумерацию или она будет проходить некорректно. читаем подраздел Power Management из раздела USB Device Port (UDP).
Цитата(max_mart @ Oct 28 2013, 16:45) *
Если я поставлю настройки, соответствующие моей обвеске, рассчитанные по калькулятору: делитель 5, умножитель 24. Частота/2 получается - 42.4 МГц.
То это нифига не работает. USB наотрез не хочет инициализироваться, а так все ост.(перефирия, т.д.) инициализируется.
см. даташит получше и с калькулятором разберитесь. там тонкость есть одна. множитель в стартапе нужно указывать на 1 меньше. отсюда и ошибка заблуждения в вычислениях.
подраздел Divider and Phase Lock Loop Programming раздела Clock Generator.
если уж совсем в тягость - давай сюда частоту кварца проблемной платы и номиналы PLL цепочки.
Цитата(max_mart @ Oct 28 2013, 16:45) *
1) Почему мое устройство работает с атмеловскими настройками, хотя по всем расчетам не должно? Почему PLL себя так ведет?
если номиналы PLL отличны от Атмеловской платы, то видимо так звёзды сложились, что попал в рабочий диапазон с их настройками.
Цитата(max_mart @ Oct 28 2013, 16:45) *
2) Почему USB не инициализировался с моими настройками?
частота BOARD_MCK далеко за 48МГц. максимальный допуск ± 0.25% от указанной.
toweroff
Цитата(max_mart @ Oct 29 2013, 08:26) *
Максимальная скорость 256000 бит/с. Что надо сделать чтобы скорость стала 1 МБ/с?

уйти от CDC и использовать bulk передачу
но и там на full speed получите около 900-950 КБ/сек
драйвер можно подцепить libusb, без проблем на всех платформах, в том числе и на Win x64 все подписано
max_mart
Значения PLL у меня на плате: 1 kOm, C1 - 10nF, C2- 1 nF. Тольщина текстолита 2.7 мм, плата из 2 слоев.

Настройки PLL фильтра - атмел: делитель - 14, умножитель 72, PLLCOUNT - 16. С такими значениями по калькулятору должно быть 3.2 кОм, 3.2 нФ, 320 пФ. Время стартапа ~ 0.2-0.3 мС

SavageForest, читайте внимательно сообщения. Я это все расписал раннее. По поводу 48 МГц я знаю из даташит. Раньше я думал, что допускается разброс, поскольку я знаю людей, у которых USB работает и при 51 МГц.

Частота кварца: 18,432 МГц

Будут какие-нибудь идеи?

toweroff, спасибо. Я так и думал.
DmitryM
Цитата(max_mart @ Oct 30 2013, 10:00) *
поскольку я знаю людей, у которых USB работает и при 51 МГц.

На этом же семействе? Не верю.
У Atmel есть такой документ: AT91SAM7S64 USB Certification (6213A–ATARM–06-Feb-06). В нем указаны коэффициенты PLL, и ссылаются они на AT91SAM7S-EK, с которой можно взять значения RCPLL: 1,5kOhm, 10nF, 1nF.
AT91SAM7S64 USB Certification
Это, чтобы прекратить споры насчет PLL и RCPLL. Сколько использовал и не только с SAM7S такие параметры RCPLL - проблем замечено не было. Само собой от разводки, тем более на двухслойке, параметры могут поплыть.
max_mart
Еще раз:

1,5kOhm, 10nF, 1nF - значения RCPLL atmel. По их калькулятору должно быть PLL: div - 5, mul - 25, PLLCOUNT - 33, а не div - 14, mul - 72, PLLCOUNT - 10.

Единственное с чем я соглашусь из выше написанного это только PLLCOUNT!!!

Суть вопроса была не в частоте 48, 42 или 51. Потому что правильно Вы сказали, что RCPLL зависит от изготовленной платы. Может поэтому у него и работало при частоте 51 МГц.

ИМХО, я думаю что мною изготовленная плата при таких трое кратных разбросах здесь не причем и проблема кроится внутри самого PLL ARMa.

Суть вопроса в расхождениях между данными PLL, взятые с калькулятора, и данными, используемые в Атмеловском примере!!!

Лан. обращусь в службу поддержки atmel по этому поводу. Посмотрю, что скажут. fman.gif

А так всем спасибо!!! biggrin.gif
SavageForest
Цитата(max_mart @ Oct 31 2013, 00:56) *
1,5kOhm, 10nF, 1nF - значения RCPLL atmel div - 14, mul - 72
с такими настройками выходит превышение частоты на ~0,11%, так что все в норме.
при div - 5, mul - 25 частота уходит вниз ~0,16%. это чуть хуже (чем у атмела) и может влиять как топология разводки, так и точность компонентов в цепочке, отмытость от флюса.
если не планируется зашивать камушек по УСБ используя САМБу, то я посоветовал-бы взять другой кварц (более легко доставаемый) и немного поменять обвес (резюк). например вот:
Код
Кварц   R1       C1       C2       div      mul
4       1k       10n      1n       1        24
6       1k       10n      1n       2        32
8       1k       10n      1n       2        24
12      1k       10n      1n       3        24
16      1k       10n      1n       4        24
18      1k       10n      1n       6        32
24      1k       10n      1n       6        24    (генератор, а не кварц)
использовал блок из-за моноширного шрифта
наиболее стабильными с такой цепочкой ПЛЛ будут кварцы на 6 и 18 МГц даже при использовании резюка 5% и X7R кондеров, а вообще советую ставить на ПЛЛ NPO кондёры и резюк поточнее, 1% например. в таком случае ПЛЛка получается более термостабильной.
более того, САМБой можно пользоваться при любом из предложенных кварцев (за искл. 24МГц) подцепившись к дебагу.
ЗЫ: сам ставил такую цепочку, работает 100%.
DmitryM
Цитата(SavageForest @ Oct 31 2013, 08:54) *
более того, САМБой можно пользоваться при любом из предложенных кварцев (за искл. 24МГц) подцепившись к дебагу.
ЗЫ: сам ставил такую цепочку, работает 100%.

Угу, а потом жалуемся. rolleyes.gif
Цитата
21.6 Hardware and Software Constraints
USB requirements: (Does not pertain to SAM7S32/16)
– 18.432 MHz Quartz
– PIOA16 dedicated to the USB Pull-up
SavageForest
Цитата(DmitryM @ Oct 31 2013, 10:00) *
Угу, а потом жалуемся. rolleyes.gif

во-первых, уважаемый, речь идет о AT91SAM7S64 камушке, а не о его меньшем брате.
во-вторых 18.432 MHz Quartz нужен только для автоматической подстройки частоты MCK на 48 МГц для зашитого уже в него (железно) алгоритма инициализации SAMBA протокола по USB и от "PIOA16 dedicated to the USB Pull-up" (при использовании самбы по УСБ) никто не открещивался.
еще раз повторю (для тех, кто в танке):
если не использовать встроенную функцию SAMBA по USB, можно ставить любой из предложенных выше кварцев (за искл. 24 МГц). в даташите все четко про это написано The Clock Generator integrates a Main Oscillator that is designed for a 3 to 20 MHz fundamental crystal. у меня работало на 24 МГц с генератором 100%, про кварц врать не буду т.к. не пробовал даже. так-что пардон к предидущему посту. поправлю табличку.
я всего-лишь привел пример параметров (div/mul) которые 100% должны запилиться с соответствующим обвесом, которые у меня работали и продолжают работать стабильно.
DmitryM
Цитата(SavageForest @ Oct 31 2013, 09:45) *
(для тех, кто в танке):

Does not pertain to SAM7S32/16 переводится как "Не относится к SAM7S32/16", поскольку в них нет USB.
Про SAM7 Boot Program over DBGU указанных ограничений нет, в отличие от USB.
SavageForest
2 DmitryM:
я вообще не понимаю чего Вы сюда влезли со своим SAM7S32/16? есть что по теме - говорите, нет - лес рядом.
DmitryM
Цитата(SavageForest @ Nov 1 2013, 08:08) *
2 DmitryM:
я вообще не понимаю чего Вы сюда влезли со своим SAM7S32/16? есть что по теме - говорите, нет - лес рядом.

Я не влез, а привел цитату из datasheet. Речь в топике идет как раз о PLL и USB для AT91SAM7S64. А по теме я привел документ от Atmel, в котором указывается при каких настройках PLL и RCPLL пройдена сертификация usb.org.
Читайте внимательнее.
max_mart
SavageForest, спасибо!!!

Как от атмел будит сообщение отпишусь. А пока они молчат!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.