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

Ресурс флеш в TMS320F28xx

EALLOW;

...............

EIDS;

сорри ерунду написал это для доступа к защищённым регистрам

 

немного оффтоп )

Все равно LF2407A я считаю очень удачным решением техаса, нравится мне он )

Да, они неплохи, реально тяжело найти альтернативу, за её цену. Хотя я о 2401. 07 дороговата.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2406 тоже иногда часть памяти вылетала через пару сотен раз

 

арм - сигнальник никакой!!!!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Меня тоже очень смутили цифры 100 (минимум) и 1000 (типовое).

Долгое время отлаживал прогу перепрошивая флешь (пока не пришел долгожданный jtag-эмулятор).

Флешка TMS320F2810 не умерла :) Перепрошивал раз 300. Хотя это не много, конечно.

 

Задавал вопрос напрямую в Texas Instruments по поводу флешки.

Вот что они ответили (сначала мои вопросы - затем идут ответы инженера TI).

 

========================================================

 

>>>This processor is planned to use in one of our development (system control of two engines).

In technical documentation processor TMS320F2810 (SPRS174N doc) on page 154 there is minimal (100) and nominal (1000) cycle recording/deleting Flash memory. Max cycles of rewritting is not mentioned. Why such a low number? Processors and microcontrollers from other manufacturers for example Microchip, Atmel amount of rewritting of Flash is several tens of thousands times.

 

We have not performed a 10k W/E qualification on the F28xx products due to resource/schedule issues. Our expectation is that we would pass the qualification.

 

>>>How do you suggest to debug software and not recording whole program in Flash memory? Using integrated RAM (L0,L1,H0)?

 

On the F28x DSPs you have the possibility of setting two H/W breakpoints in Flash and debug it. . By default, CCS is setting these two breakpoints when you debug your code. In order to free up these two breakpoints to use them by you please make sure that the following two boxes are checked in CCS under

Options -> Customize -> Program Load Options:

1. Check `Do not set CIO breakpoint at load.`

2. Check `Do not set end of program breakpoint at load.`

With this settings, you should be able to use the two available H/W breakpoints.

In CCS go to Debug -> Breakpoints and select H/W break, enter the line and file name for the breakpoint location.

The steps are

1) flash programming

2) then you make a load symbol in CCS (with the .out-file) in order to be able to do symbolic debugging

3) then you can set the breakpoint

The flash pipeline is implemented to accelerate the code execution out of the DSP internal flash memory. The flash has compared to the DSP speed a really long access time.

i.e. CPU speed is 150MHz (cycle time 6.666ns); Flash access time is 36ns

=> It takes 36ns/6.666ns = 5.4 CPU cycles to do one fetch one instruction from the flash memory. Since 5.4 CPU cycles is not possible, we need to round it up to 6 CPU cycles.

=> So it takes 6 CPU cycles to do one access to the flash memory and therefore we need to setup in the wait state register 5 wait states to be added per flash access.

This also means that code execution performance is dramatically reduced. In this example if you execute code out of flash memory, you will reach a performance of 150MHz/6 = 25MIPS.

Compared to code execution from the internal RAM, there you can reach a performance of 150MIPS.

In order to increase the performance out of the flash memory, we have implemented the flash pipeline which allows to fetch up to 64 bit of instructions in one access. This allows you by executing linear code out of the flash memory to multiply the performance by a maximum factor of 4 which leads to a performance of 100MIPS.

Please note that we always advice to run time critical code like ISRs from the DSP internal RAM.

The following app note might be interesting for you:

Running an Application from Internal Flash Memory on the TMS320F28xx DSP (Rev. F)

http://focus.ti.com/general/docs/techdocsa...ctName=spra958f

Associated code examples is provided at same page as well.

 

>>>During debugging of software, constantly rewritting Flash can just produce its resources.

We have programmer SUP2000 from company SoftBaugh. This programmer unit meant for recording only Flash processor memory? Can we using this programmer record loader in RAM of processor?

 

We do not have experience with SoftBaugh SUP2000. They offer a single unit which allows you only to program the DSP via the SCI interface before you put it on your board. In case you have more detailed questions to their solution, please contact them directly.

============================================================

 

Вот...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Странно они так ушли от конкретного ответа на вопрос "How do you suggest to debug software and not recording whole program in Flash memory?"

начали рассказывать как отлаживать из флэш. Интересные такие )

 

На самом деле предпологается цеплять внешнюю память на XINTF и запускать из неё. Просто грузить туда код неудобно. По сути нужно, через JTAG, загрузить в RAM загрузчик байтиков во внешнюю память(предварительно сконфигурировав всё, для её успешной работы), а после копирования прыгнуть на нужный адрес.

На eZdsp boards устанавливают 256KB offchip SRAM memory.

Есть примерчик даже. Правда примитивный, но - обработчик прерывания находится во внешней памяти, при этом его "клон" так и остается висеть в RAM :) Но как пример годится, я думаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне хватает вполне SARAM, ее расширяешь немного от стандартно выделенных, там не все разделы в карте памяти используются полностью, какие то области сокращаешь другие за счет них увеличиваешь.

Поэтому мне пока хватает. Во когда с менюшкой и пультом придется работать видимо не хватит. придется во флэш писать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А мне уже не хватает!

Люди, а может быть прямо с CCS во внешнюю память можно записать прогу?!

Слинковать всё красиво, чтоб .text лежал в XINTF ZONE7 и load program!

В GEL есть инициализация XINTF.

прям через JTAG пропишет все регистры, а дальше простая запись в адрес такой-то и вперед!

Что скажете?

По-моему вполне реально!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я для отладки программы на отладочной плате ezdsp tms320f2812 так и делаю. Там 64k word внешней памяти и я проект гружу прямо туда через JTAG как и во внутреннюю память.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В общем всё работает.

 

Редактируем linker .cmd файл, .gel файлик, очень кстати, инициализирует XINTF перед загрузкой проги.

Поначалу, когда наблюдал за GPIO регистрами, закомментировал эту функцию, а вот сейчас пришлось вернуть ))

Для интересующихся, выкладываю свою версию XINTF_lnk.cmd

MEMORY
{
PAGE 0 :
   /* BEGIN is used for the "boot to SARAM" bootloader mode      */
   /* BOOT_RSVD is used by the boot ROM for stack.               */
   /* This section is only reserved to keep the BOOT ROM from    */
   /* corrupting this area during the debug process              */
   
   BEGIN      : origin = 0x200000, length = 0x000002     /* Boot to XINTF zone7A                      */
   BOOT_RSVD  : origin = 0x200002, length = 0x00004E     /* Part of M0, BOOT rom will use this for stack changed for XINTF*/               
   

   RAML0123      : origin = 0x008000, length = 0x004000   /*Together*/ 
/*   RAML1      : origin = 0x009000, length = 0x001000    */
  /* RAML2      : origin = 0x00A000, length = 0x001000    */
  /* RAML3      : origin = 0x00B000, length = 0x001000    */
   ZONE7A     : origin = 0x200050, length = 0x03F7B0    /* XINTF zone 7 - program space */ 
   CSM_RSVD   : origin = 0x33FF80, length = 0x000076     /* Part of FLASHA.  Program with all 0x0000 when CSM is in use. */
   CSM_PWL    : origin = 0x33FFF8, length = 0x000008     /* Part of FLASHA.  CSM password locations in FLASHA            */
   ADC_CAL    : origin = 0x380080, length = 0x000009
   RESET      : origin = 0x3FFFC0, length = 0x000002
   IQTABLES   : origin = 0x3FE000, length = 0x000b50
   IQTABLES2  : origin = 0x3FEB50, length = 0x00008c
   FPUTABLES  : origin = 0x3FEBDC, length = 0x0006A0
   BOOTROM    : origin = 0x3FF27C, length = 0x000D44               

         
PAGE 1 : 
   RAMM01      : origin = 0x000050, length = 0x0007B0
/*   RAMM1      : origin = 0x000400, length = 0x000400     */
    
   RAML4567    : origin = 0x00C000, length = 0x004000    /*together*/
/*   RAML5      : origin = 0x00D000, length = 0x001000    
   RAML6      : origin = 0x00E000, length = 0x001000    
   RAML7      : origin = 0x00F000, length = 0x001000 */
   ZONE7B     : origin = 0x23F800, length = 0x000800     /* XINTF zone 7 - data space */
}


SECTIONS
{
   /* Setup for "boot to SARAM" mode: 
      The codestart section (found in DSP28_CodeStartBranch.asm)
      re-directs execution to the start of user code.  */
   codestart        : > BEGIN,     PAGE = 0
   ramfuncs         : > RAML0123,     PAGE = 0  
   .text            : > ZONE7A,     PAGE = 0   /*all code in external RAM*/
   .cinit           : > ZONE7A,     PAGE = 0
   .pinit           : > ZONE7A,     PAGE = 0
   .switch          : > RAML0123,     PAGE = 0
   
   .stack           : > RAMM01,     PAGE = 1
   .ebss            : > RAML4567,     PAGE = 1  /*here, we use internal RAM*/
   .econst          : > RAML4567,     PAGE = 1      
   .esysmem         : > RAML4567,     PAGE = 1

   IQmath           : > RAML0123,     PAGE = 0
   IQmathTables     : > IQTABLES,  PAGE = 0, TYPE = NOLOAD 
   IQmathTables2    : > IQTABLES2, PAGE = 0, TYPE = NOLOAD 
   FPUmathTables    : > FPUTABLES, PAGE = 0, TYPE = NOLOAD 
      
/*  DMARAML4         : > RAML4,     PAGE = 1
   DMARAML5         : > RAML5,     PAGE = 1
   DMARAML6         : > RAML6,     PAGE = 1
   DMARAML7         : > RAML7,     PAGE = 1*/
   
   ZONE7DATA        : > ZONE7B,    PAGE = 1   

   .reset           : > RESET,     PAGE = 0, TYPE = DSECT /* not used                    */
   csm_rsvd         : > CSM_RSVD   PAGE = 0, TYPE = DSECT /* not used for SARAM examples */
   csmpasswds       : > CSM_PWL    PAGE = 0, TYPE = DSECT /* not used for SARAM examples */
   
   /* Allocate ADC_cal function (pre-programmed by factory into TI reserved memory) */
   .adc_cal     : load = ADC_CAL,   PAGE = 0, TYPE = NOLOAD
     
}

Много лишнего мусора, также, кажется не вся внутренняя оперативка используется, но чистить окончательно было лень.

Главное сам смысл - циферки каждый сам подставит :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так я же вам отвечал что просто расширяете участки карты памяти под которые не хвататет за счет недоиспоьзующихся. Поэтому вполне можно обойтись оперативой, главное нельзя лезть в защищенные зоны, ибо будут ошибки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не хватает мне оперативки как ни крути!

То, о чём вы писали, я проделывал раньше, но после сборки speex, секция .text уже никуда не вмещалась. Пришлось мудрить с XINTF....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Чтобы не плодить тем, напишу свой вопрос сюда: как правильно зашиь крнстанты во флешь процессора LF2407A, чтобы с ними можно было нормально работать. В хелпе нашел пример, где опичано каким образом подправить библиотеку rts2xx.lib чтобы константы при загрузке автоматически копировались в ОЗУ, проделанные манипуляции не сильно помогли. Знаю что есть такая вещь как pfunc. Как кто решает проблему?

Изменено пользователем kamil yaminov

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 kamil yaminov

Не темы плодите, так оффтоп )

Ответы на оффтоп плодят флуд.

Мне кажется лучше уж создать тему))

 

/*Поможем модераторам!

Скажем нет оффтопу и флуду.

А сам-то я какраз и нафлудил вот сейчас */

 

А вообще вопрос лучше конкретизировать(а что, щас не нормально с ними работается??) и делать это уж точно не в этой ветке.

Тут про TMS320F28xx flash и всё, что связано с её ресурсом))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не хватает мне оперативки как ни крути!

То, о чём вы писали, я проделывал раньше, но после сборки speex, секция .text уже никуда не вмещалась. Пришлось мудрить с XINTF....

 

 

Я уже почти год работаю с одним процессором (2808). По началу всячески экономил ресурс флешки пока программа помещалась в оперативку. Сейчас количество перезаписей уже за 500. Вообще эту проблему удалось частично решить при помощи конструктивных ухищрений – был изготовлен общий для всех изделий модуль, на котором расположены: процессор, стабилизаторы напряжений, резонатор и пара разъемов по 40 контактов. В случае отказа флешки на проце будет просто заменен модуль.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Господа, а загляните сюда, пожалуйста. Очень помощь нужна...

 

http://electronix.ru/forum/index.php?showtopic=48546

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...