Перейти к содержанию
    

bmf

Свой
  • Постов

    146
  • Зарегистрирован

  • Посещение

Весь контент bmf


  1. для того что бы последняя запись во внутреннюю память осуществилать (перед неожиданным software reset) необходимо сделать две холостые записи(повторить) что бы корректно очистилось FIFO а какие блоки памяти конкретно есть в вашем чипе смотрите раздел Memory Organization
  2. это если вы подключаете код(например startup) в котором эта метка определена. в приведенном примере загрузчика все находится в одном файле вообще без метки начала и соответственно эти строчки будут ошибкой адреса в LDF надо указывать в диапазоне реальные для данного процессора для кода BF533 0xFFA00000..0xFFA07fff BF532 0xFFA08000..0xFFA0ffff BF531 0xFFA08000..0xFFA0BFFF рабочий файл для 532 ARCHITECTURE(ADSP-BF532) SEARCH_DIR( $ADI_DSP\Blackfin\lib ) $OBJECTS = $COMMAND_LINE_OBJECTS; MEMORY { PROGRAM { TYPE(RAM) START(0xFFA08000) END(0xFFA0ffff) WIDTH(8) } //L2 SDRAM { TYPE(RAM) START(0x00000000) END(0x07FFFFFF) WIDTH(8) } //SDRAM } PROCESSOR p0 { OUTPUT( $COMMAND_LINE_OUTPUT_FILE ) SECTIONS { code { // Align all code sections on 2 byte boundary INPUT_SECTION_ALIGN(2) INPUT_SECTIONS( $OBJECTS(program)) }>PROGRAM SDRAM { INPUT_SECTION_ALIGN(1) INPUT_SECTIONS( $OBJECTS(sdram) ) } >SDRAM stack { // The data sections shouldn't be aligned. INPUT_SECTION_ALIGN(1) INPUT_SECTIONS( $OBJECTS(stack)) }>PROGRAM } } как правило в коде инициализации внутрення память данных не используется для переменных, поэтому и ее описания нет
  3. правильные строчки для BF531 будут: ARCHITECTURE(ADSP-BF531) .... PROGRAM { TYPE(RAM) START(0xFFA08000) END(0xFFA13FFF) WIDTH(8) } //L2 ... взяты из стандартного LDF для 531 ;)
  4. Скорее всего вы сгенерили свой LDF, вместо того чтобы взять из примера. Он написан вручную и main не требует. После генерации dxe забиваете его в опцию Load->Options->Initialisation file основного проекта и все. Ну и не забудьте подправить LDF под BF531 всесто BF533.
  5. Для VDSP, как и для любой немного более продвинутой либ, это только пол шага. Затем их надо "обернуть" как устанавливаемый драйвер консоли. Компилите проект с использованием stdio и включите свои функции как в примере. У меня: rs_send(byte ch); byte rs_get(); - буферизированные по прерыванию rs_sendpoll(byte ch); - по опросу(polling), а эта вообще работает даже из прерываний при системных ошибках SampleBFConsole.zip
  6. Почитайте еррату или воспользуйтесь поиском по конфе. Совсем недавно было.
  7. Для загрузки в AT45DB161D модифицируйте первый байт BIN файла лоадера. По программированию самой AT45DB161 - не сложный протокол. Способ программирования - достаточно каким либо способом (JTAG, slave загрузка, вспомогательная загрузочная ИС на панельке или подключенная к шине) загрузить управляющую программу в DSP. Затем, с помощью любого доступного внешнего интерфейса для данных прошивки, записать саму AT45. В процессе работы на кодом, аналогично происходит и самопрошивание на новые версии. Скорость перередачи и записи критична если Вы работаете над большим проектом с множеством изменений. Я например использую Ethernet и скорость смены прошивки занимает всего несколько секунд. Официальный путь от Analog в среде Visual DSP - загрузка через JTAG кода драйвера программатора в DSP, а затем передача по JTAG данных для самой прошивки.
  8. если просто поставить AT45DB161D, то просто незагрузится (по моему исследованию вопроса просто из-за простейшей ошибки в ROM загрузчике). для решения вопроса 1. Способ от Analog D (описан в errata для 537). запрограммировать AT45DB161D в режим 512 сектора 2. Самый простой - Тут на сайте уже предлагали в образе прошивки первый байт исправить на ff, в результате будет форсироваться детектирование AT45DB161В. Проверял все работатет. 3. Еще вариант, более унивесальный, если в схеме есть возможность загрузиться в slave mode по SPI от подключенного микроконтроллера (часто допольнительно необходим небольшой MCU как фунция переферии, АЦП, watchdog, upgrader и т.д). Небольшой загрузчик на базе оригинального небольшого размера. И после этого вы уже можете грузиться и апгрейдится вообще с чего угодно, выключая UART, SPORT и конечно с сериал EEPROM любых емкостей. Первоначальную прошивку EEPROM уже можно выполнить, загрузив готовую рабочую программу в память DSP через UART MCU.
  9. всеже лучше AT45DB161D (AT45DB161В устарела и уже труднее доставать) преимущества - есть в компактном 8-пиновом корпусе (также этот корпус стандартный для последовательной EEPROM памяти других производителей) - скорость работы до 50МГц (время полной загрузки значительно снижается) не совместимость загрузчика Blackfin легко обходится
  10. почти рядом - закладка Files (http://blackfin.uclinux.org/gf/project/jtag/frs/) bfemu-gdbproxy - сам не пользуюсь, поэтому если что, проконсультировать не смогу
  11. не конечно, это масочное ПЗУ для загрузчика. Это только в новых чипах Blackfin BF52x и BF54x уже есть 8кБ однократно программируемой памяти для кода, данных или закрытых ключей
  12. Могу ошибаться но загрузчик проверяет сигнатуру serial EEPROM и именно для BF532 максимально что можно напрямую подключить по документации Analog Devices это AT45DB161 (исходники загрузчика есть в VDSP, можно посмотреть). Работу больших чипов памяти надо еще дополнительно проверять или мутить что то свое нестандартное. Предварительно убедитесь что у кого то это работает.
  13. это только при первоначальной отладке (проверяется истинность выражения), в релизе не используется можно везде убрать убрать с помощью #define assert() или использовать опцию компиляции для релиза -DNDEBUG а для работы с внешней памятью общий смысл такой - замена указателя на тип far (длина уже 32 бит) и работа с ним как обычно в Си для инициализации соответственно надо привести типы к одному пример int far * ptr=(int far *) 0x123456L; 0x12 - ляжет в DMPG 0x3456 - как смешение все по правилам стандартного Си не более. пример операций c указателями: ptr++; ptr+=5; *ptr++==.. *(ptr+1)=.. *(ptr+100)=.. ..=*ptr++; ..=(ptr+10); возможны и другии вариации использования модификатора far лучше сразу для проверки смотреть в сгенеренный ассемблерный листинг и для эффективного кода оптимизация должна быть включена
  14. уточню на примерах 1 ... int far *ptr=(int far *) (((unsigned long)VALSEG<<16) | (unsigned)(off)); *ptr++=value1; *ptr++=value2; ... value3=*ptr; 2 static void _ideReadWord(unsigned far *adr) { unsigned i; for(i=0;i<256;i++) { *adr++ =io_space_read(IDE_DATAREG); } } 3 inline void SetEntryVal(bool bFat32,unsigned far *buf,unsigned thisoff,unsigned long *pval) { if(!bFat32) { *((WORD *)(buf+thisoff))=*((WORD *)pval+1); } else { unsigned far *ptr=buf+thisoff*2; *ptr++=*(((WORD *)pval+1)); *ptr= (*ptr & 0xF000) | (*(((WORD *)pval)) & 0x0FFF); } } Если вы помните, тоже самое применялось и в x86 в DOS small модели, все указатели по умолчанию до 64к, а для дпинных успользовалось far для задания другого сегмента. Для этого DSP это более чем оправдано, т.к. быстрые DSP алгоритмы живут во внутренней памяти и использование смещения при адресации лишь приведет к потери быстродействияю. В ранних версиях VDSP такое обращение возможно было только через специальные функции external_memory_read и external_memory_write. Использование far - чистый Си наглядный и переносимый код
  15. точно не помню, посмотрите datasheet на 45..D, там какой-то бит ставится, после чего она безвозвратно только на 512
  16. из-за глюка в ROM загрузчике, только в режиме сектор=512 байт
  17. Как раз с SD это легко делается на раз через встроенную крипографию. И никакая другая карта работать не будет, и не зная пароля доступа и прочитать нельзя. Все описано в спецификации. Сам пока пока не юзал (только собираюсь), но вроде не сложно.
  18. Цена NAND в Mt-System (www.mt-system.ru/price.tree.mt?id=15735) K9F4G08U0A - 512МБ - около 10$, но сейчас на рынке полно SD 1ГБ за ту же цену и даже дешевле, только обратите внимание, что последний резкий ценовой скачек (для SD) обусловлен переходом на новую технологию типа MLC (при той же площади кристалла), в результате чего надежность снизиласть на порядок (до 10.000 циклов при более сложной ECC коррекции). Для вашего случая проще поставить коннетор микроSD(типа DM3A-SF-PEJ) и такую же карту, тем более что коррекция и замена битых блоков по спецификации SD делается самим контроллером в фоновом режиме.
  19. IMHO тоже самое, ведь переписывается полностью все равно вся страница (даже при изменении одного бита), и уровень "накачки" лог.1 , где бы она не была, относительно уровня при стирании постепенно садится. И производитель гарантирует 4-е таких цикла.
  20. Там есть такой параметр для Samsung NAND - "Number of Partial Program Cycles - 4 cycles" (макс. колличество частичных записей на страницу), если не больше то гарантирутся.
  21. AT45DB161 с буквой D

    как раз при программировании и не совсем полная. См пункт 3."Design Considerations" указанного документа
  22. www.analog.com/processors/adsp/technicalLibrary/manuals/index.html www.analog.com/UploadedFiles/Associated_Docs/747057567ADSP_21992_EZ_KIT_LiteManual.pdf
  23. Нельзя. Свободное пространство есть логическая функция от применяемой файловой системы. И не проанализировав ее естественно ничего не получишь. :(
×
×
  • Создать...