Jump to content

    

sz36

Свой
  • Content Count

    101
  • Joined

  • Last visited

Community Reputation

0 Обычный

About sz36

  • Rank
    Частый гость

Recent Profile Visitors

1206 profile views
  1. Да, это возможный вариант, но довольно трудоемкий - там же должен быть фикированый зазор и ширина проводника, чтобы обеспечить номинальное волновое сопротивление. Еще можно резистор с нулевым сопротивлением поставить. Но хотелось бы какой-нибудь более прямой путь
  2. Hi, All! Пытаюсь создать в AD PCB антенну, изображена на прилагаемой картинке. Только на картинке антенна и подходящая к ней цепь в разных слоях, а мне нужно в одном, но это сути не меняет. Проблема в том, что один конец антенны подключен к выходному пину, а другой к земле, поэтому для AD это является замыканием цепей, и DRC вываливает кучу ошибок. Не беда, думаю, в правилах проекта уберу контроль этой цепи на зазоры и замыкания, так и сделал - но тогда AD при заполнении земляного полигона тоже зазор игнорирует и заливает антенную цепь землей полностью. Такой же результат, понятно, если на принципиальной схеме сделать антенную цепь землей. Пробовал как рисовать антенну прямо на плате, так и создать в виде компонента, и в виде компонента-джампера - успеха не достиг. Как быть, есть ли способ в AD нарисовать такую антенну, и чтобы зазоры в полигоне сохранились, и DRC прошел?
  3. Hi All! А какие программаторы/отладчики поддерживают High-Voltage activation UPDI? Я использую AtmelICE, у него в UG явно написано, что высоковольная активация UPDI не поддерживается. В AtmelStudio ключ "--12v-updi-activation" присутствует, то есть через что-то она должна ее поддерживать, но через что - непонятно. Копаюсь в описаниях - не могу найти. Может кто знает?
  4. Hi, All! Понадобилось мне тут устройство на новой, уже микрочиповской ATMega808. Для чего взял последний IAR 7.20.1, который ее поддерживает, и столкнулся с проблемой - не работает отладчик AtmelICE. Ошибка: "Fatal error: Failed to set program breakpoint". Отладчик стартует, делает вид, что даунлоадит программу в чип, но в секции CODE показывает все нули. Ну и никакая отладка невозможна. При этом регистры процессора, I/O и RAM вроде бы показываются правильно. Фьюзы, опять же, программируются из IAR. При этом из AtmelStudio этот же AtmelICE, с этой же платой прекрасно работает, и как программатор, и как отладчик. Что это? Баг IAR или как-то можно бороться? Попутно второй вопрос. Раньше (довольно давно) мне удавалось проект из IAR AVR отлаживать в AtmelStudio. А теперь при выполнении Open Object File For Debuging, проект создается, но исходников он не видит, а при попытке запуска отладчика, пишет невразумительное, что-то пошло не так, и рекомендует посмотреть логи. Где я ничего существенного не вижу. Для отладки из AtmelStudio выбираю в IAR выходной формат ubprof, это правильно? Что еще нужно сделать? Можно, конечно, из тех же исходников создать и откомпилировать проект в AtmelStudio, так все работает (на первый взгляд), но мне хотелось бы работать в IAR.
  5. Спасибо, заработало! Да, не учел я, что секции стека у загрузчика и основной программы могут совсем в разных местах оказаться. А вообще я предполагал, что стартовый код стек инитит.
  6. Продолжение. Сделал я следующим образом. Переместил основную программу на два сектора вниз, освободив их под загрузчик. Таблица векторов, действительно, легко переставляется, еще скрипт линкера пришлось исправить, в обшем из под отладчика основная программа стартует с таблицей векторов в 0x0802000 и прекрасно работает. Адреса 0x0800000-0x0802000 при этом остаются нетронутыми. В первых двух секторах разместил загрузчик, он работает с запрещенными прерываниями (хотя, в принципе, может использовать, просто не нужно), делает все, чего надо. Вопрос в том, как после работы загрузчика грамотно передать управление основной программе. Пробовал в загрузчике также переместить таблицу векторов в 0x0802000, после чего вызвать HAL_NVIC_SystemReset(). Но этот вариант не катит, поскольку при сбросе VTOR обнуляется и мы опять попадаем на загрузчик. Другой вариант - вручную. Делаю так: const unsigned int* Ptr = (unsigned int*)(FLASH_BASE | FLASH_LOADER_SIZE); ((void (*)())Ptr[1])(); //Берем вектор Reset и переходим на него При этом программа вроде попадает на нужный адрес, PC правильный, но не работает. Чего ей еще надо, понять не могу. Там IAR'овский код инициализации приложения. Как правильно передать управление от загрузчика основной программе?
  7. Всем спасибо, буду пробовать
  8. Hi, All! 1) Есть ли какой-нибудь способ перезаписать свой загрузчик в System Memory (которая с 1FF0 0000), или она в принципе readonly? 2) Если нет, то как тогда принято делать обновление прошивки своего девайса через сеть? У меня есть внешняя SPI Flash, допустим новая версия прошивки уже загружена из интернета в нее и проверена, каковы дальнейшие действия? Я могу скопировать свой загрузчик в RAM и запустить, чтобы он переписал новую прошивку из внешней SPI Flash во внутренюю Flash кристалла. Но не нравится мне этот способ тем, что если в процессе произойдет какой-либо сбой (электричество, etc), устройство превращается в тыкву. Существует ли иной, более безопасный способ? 3) Есть мысль поместить загрузчик в последний сектор Flash и переписывать прошивку, исполняя оттуда. Тогда, как я понимаю, таблица векторов прерываний не будет корректной, но, наверное, можно переписать прошивку с полингом, запретив глобально все прерывания на это время. Получится ли так?
  9. Понятно. А как тогда (и возможно ли это) защитить свою программу от считывания и отладки, но при этом сохранить возможность стирания и перезаписи?
  10. Только недавно работаю с АРМами, поэтому не все понимаю. Экспериментируя, установил в OptionBytes flash memory read protection level = 2 и теперь не могу доступиться к кристаллу ни одним из известных мне способов (при этом моя программа в чипе корректно работает). Кристалл - STM32L151. Использую ST-LINK/V2, IAR C, STM32 ST-LINK Utility, ST-LINK_CLI. Последняя отвечает: No target connected Unable to connect to ST-LINK! Остальные средства примерно аналогично. Пробовал разные опции: JTAG, SWD и др - ничего не помогает. Как стереть чип и снять защиту? И возможно ли это?
  11. Вообще-то не так, GSM модем включается транзисторным ключом на вторичной стороне, и линия связи короткая - 20мм, но между ключом и выходом БП стоит ферритовый бид, его индуктивность может, наверное, аналогичный эффект вызвать. Попробую убрать.
  12. Имеетсся StepDown преобразователь 12В -> 3.5В на TPS563209. Схема типовая, из даташита, разводка тоже выполнена в соответствии с приведенной там картинкой. Индуктивность 3.3мкГ, выходная емкость - 2*22мкФ, керамических. Основная нагрузка - GSM модем, и еще всякая мелкая электроника. Проблема в том, что при включении GSM модема TPS563209 с большой вероятностью сгорает, почему? При этом, если вместо модема подключить резистивную нагрузку на 2А, то все прекрасно работает. Также ничего не выгорает при многократных КЗ выходной цепи. Вообще, согласно даташиту у TPS563209 есть защита от всего, и тем не менее сгорает. Как-нибудь можно бороться?
  13. Компилятор XScale

    Ага, у меня тоже, я из SDK к WINCE 6 взял. Ну я вообще не понимаю, как так может быть. Пойду VS2005 искать. А ключи типа процессора у Вас какие? У меня ARM5T (/QRarch5t) и /Qxscale. Код, кстати, тоже какой-то мутный, я не такой глубокий знаток ARM, сходу не понимаю, надо под отладчиком посмотреть. Но, во всяком случае, сохраняется 64 бита, это дает надежду. У меня, в Debug сборке, компилер MMX код не генерирует, эмулируя обычными операциями (возможно, это и правильно). Но что интересно, в таком режиме тоже в старших 32 битах возвращаемых Intrinsic функциями значений оказывается мусор, под отладчиком это прекрасно видно. То есть, такое поведение и задумывалось. Вообщем, не понимаю. Пойду VS2005 искать, спасибо, что код проверили Это я знаю, что помогать надо, но он же должен видеть, что до конца области видимости упоминаний этих переменных нет. Как ему еще указать? Я больше с IAR для AVR работаю, привык уже, что тот, если значение переменной не используется, все операции с ней выбрасывает. Если после этого другая переменная оказывается неиспользуемой, или функция - и их тоже, и т д. Бывает, чисто для отладки нужно переменную вставить, так только volatile static прокатывает. А MSVS, мерзавец, лепит в выходной код все, почем зря.
  14. Компилятор XScale

    Мое почтение! А у Вас какая платформа? Как я понимаю, __m128 это SSE2, а его далеко не все платформы поддерживают. У меня __m64, но и с ним засада обнаружилась. Вот, к примеру, такой код int Temp[64]; __m64 X; X.m64_i64=0x1122334455667788; __m64 Y; Y.m64_i64=0x8877665544332211; __m64 A=_mm_macz_pi16(X, Y); (!) Temp[0] = A.m64_u32[0]; Temp[1] = A.m64_u32[1]; Посмотрим, во что он компилируется, начиная со строки (!). Релиз, все возможные опции оптимизации выставлены на максимальную скорость, MSVS2008. 00040 ed9d1144 wldrw wr1, [sp, #0x110] 00044 ed9d0146 wldrw wr0, [sp, #0x118] 00048 e3a03040 mov r3, #0x40 0004c ee710100 wmacsz wr0, wr1, wr0 00050 ed8d0144 wstrw wr0, [sp, #0x110] ---[b]баг компилятора?[/b] 00054 e59d2114 ldr r2, [sp, #0x114] 00058 e59d0110 ldr r0, [sp, #0x110] 0005c e58d0010 str r0, [sp, #0x10] 00060 e58d2014 str r2, [sp, #0x14] Вопрос - зачем строки 50...60? Почему бы сразу не сохранить в нужное место? А так, получается, на одну MMX команду, где достигается какая-то экономия, аж 5 ненужных пересылок с памятью вместо одной. Я помню, в XX веке компиляторы генерировали подобный код, но сейчас, мне кажется, это уже как-то неприлично, компилятор должен оптимизировать это на раз. Но это даже не главное. А главное - почему команда wstrw, а не wstrd?! Получается, что сохраняются только младшие 32 биты из 64, а в старших битах оказывается мусор. Причем, в данной команде, положим, результат не может выйти за 32 бита, но такой же код генерируется и для всех других функций, в частности, для _mm_unpackel_pu8() и подобных, где уж точно все 64 бита нужны. Везде используется wstrw, только младшие 32 бита. Что это, баг компилятора!? Слабо верится, почему никто не заметил, ведь ни одна MMX функция не работает. Или я чего-то не понимаю? Причем, под Win32 тот же код компилируется и работает правильно, проблема только под ARM.
  15. Компилятор XScale

    Да, так и есть, я вроде уже разобрался, спасибо. Сейчас пытаюсь вручную критичные куски кода на MMX переписать. Найти бы где-нибудь толковое описание этих intrinsic функций, или примеры использования. А то в MSDN фактически только прототипы, приходится их с описанием машинных команд сопостовлять, муторно.