реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> LPC3250 прошивка EEPROM через SPI
ra9ftm2
сообщение Nov 18 2009, 11:46
Сообщение #1





Группа: Участник
Сообщений: 11
Регистрация: 5-03-06
Пользователь №: 14 965



Господа!

Возникла необходимость положить начальный загрузчик в EEPROM, подключенный через SPI интерфейс.
Из NOR и NAND получается запускать без проблем. Прошиваю через Keil и IAR с использованием J-Link.

Используется отладочная плата от PHYTEC.

Буду благодарен, если кто-нибудь подскажет как это сделать.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Nov 18 2009, 11:50
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(ra9ftm2 @ Nov 18 2009, 14:46) *
Возникла необходимость положить начальный загрузчик в EEPROM, подключенный через SPI интерфейс.

Как возникла, так и отпадет - исполнение кода из SPI памяти невозможно.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ra9ftm2
сообщение Nov 18 2009, 12:02
Сообщение #3





Группа: Участник
Сообщений: 11
Регистрация: 5-03-06
Пользователь №: 14 965



Цитата(zltigo @ Nov 18 2009, 14:50) *
Как возникла, так и отпадет - исполнение кода из SPI памяти невозможно.

В документации
http://www.standardics.nxp.com/support/doc...240.lpc3250.pdf
написано что возможно вроде бы, хотелось бы туда именно крохотный загрузчик положить...
Цитата
The LPC32x0 supports several boot options. The boot process can identify, copy to
internal SRAM (IRAM) and execute an external program from the following external
sources:
• UART boot using either the UART5 or USB transceiver.
• SLC/MLC NAND Flash boot.
• SPI boot using SSP0.
The boot process can also identify and execute in place an external program from the
following external source:
• EMC boot from external static memory.


Сообщение отредактировал ra9ftm2 - Nov 18 2009, 12:03
Go to the top of the page
 
+Quote Post
zltigo
сообщение Nov 18 2009, 15:01
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(ra9ftm2 @ Nov 18 2009, 15:02) *
В документации

Прочитайте, что Вы написали в названии темы - LPC23xx. Для ARM9 - изучайте, как писать промежуточный загрузчик для J-Link. A вообще EEPROM штука специфичная для загрузки и интерфейс с ней буквами SPI не исчерпывается. Смотрите, какие конкретно чипы для бутирования с SPI штатным загрузчиком поддерживаются, ибо разные они sad.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ra9ftm2
сообщение Nov 19 2009, 05:15
Сообщение #5





Группа: Участник
Сообщений: 11
Регистрация: 5-03-06
Пользователь №: 14 965



LPC3250 конечно, перепутал немножко... )
Промежуточный загрузчик, я так понимаю это вот это:
http://www.standardics.nxp.com/support/doc...oot.example.zip

из readme:
Цитата
The SPI Flash write folder
==========================

The SPI Flash write module was designed so that the SPI Flash memory already
embedded in the target system could be programmed using the same debug
environment utilized for the end user application development. The programming
application takes the content specified by the user and burns it into the SPI
Flash memory using the SPI1/SSP0 interface. This particular SPI Flash
programming module was developed to support programming of a Winbond W25Q16
2Mbit Flash memory (datasheet provided with the example).


Вообще может быть легче подпаяться по SPI и прошить с компа или выпаять эту EEPROM'ину (стоит atmel AT25256AT)? )))


Цитата(zltigo @ Nov 18 2009, 18:01) *
Смотрите, какие конкретно чипы для бутирования с SPI штатным загрузчиком поддерживаются, ибо разные они sad.gif

А вот тут не понял. Мануал по LPC3250 и здесь прямо блок-схема работы загрузчика нарисована по очереди смотрятся на предмет загрузчика SPI, EMC, NAND затем загрузчик грузится в iRAM и запускается.

Сообщение отредактировал ra9ftm2 - Nov 19 2009, 05:17
Go to the top of the page
 
+Quote Post
zltigo
сообщение Nov 19 2009, 09:11
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(ra9ftm2 @ Nov 19 2009, 08:15) *
А вот тут не понял. Мануал по LPC3250 и здесь прямо блок-схема работы загрузчика нарисована по очереди смотрятся на предмет загрузчика SPI, EMC, NAND...

А еще джампер EEPROM/Flash... только ведь EEPROM не только Flash рознь, но е EEPROM-у - разные они могут быть. Где-то указано, что загрузчик конкретно AT25 понимает?


Цитата(ra9ftm2 @ Nov 19 2009, 08:15) *
LPC3250 конечно, перепутал немножко... )

Исправил.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ra9ftm2
сообщение Nov 19 2009, 09:52
Сообщение #7





Группа: Участник
Сообщений: 11
Регистрация: 5-03-06
Пользователь №: 14 965



Цитата(zltigo @ Nov 19 2009, 12:11) *
А еще джампер EEPROM/Flash... только ведь EEPROM не только Flash рознь, но е EEPROM-у - разные они могут быть. Где-то указано, что загрузчик конкретно AT25 понимает?

Джампер стоит в spi eeprom.
В документации к этой плате phytec написано что может грузиться.

Вот собственно:
Цитата
The phyCORE-LPC3250 comes pre-configured with a 32kByte SPI EEPROM located at U9 and is
connected to the LPC3250 SSP port 0. By default the EEPROM stores board configuration information
and the Ethernet MAC ID starting at 256 bytes from the end of the EEPROM (0x7f00). The data is stored in
the following configuration struct:
...

The remaining space within the EEPROM is free for custom use or can be used to store a boot loader.

...

See the Atmel AT25256AN datasheet for details.


Про перемычки посмотрел, всё как нужно стоит, загрузка именно с SPI EEPROM, запись разрешена.
Go to the top of the page
 
+Quote Post
ra9ftm
сообщение Nov 24 2009, 07:01
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 8-01-09
Пользователь №: 43 014



Все-таки получилось запустить небольшую программку из eeprom.

В библиотечке CDL с сайта NXP есть пример spi. Немного переделываем в файле spi_example.c этот кусочек:
Код
  while (bytes > 0)
  {
      data = eewr_data[SPIBYTES-bytes];
    eeprom_write(addr, data);
    addr++;
    bytes--;
  }

в массив нужно записать нашу программу eewr_data
На сайте NXP есть пример "LPC3000_Serial_Boot_Example" по записи в SPI Flash, в котором есть утилитка "L3K_BOOT.EXE" , генерирующая из HEX-файла массив уже пригодный для записи в SPI. Так что небольшая программка, маргающая светодиодами вполне работает.

Мне же нужно написать(переписать) загрузчик наподобие kickstart. Сам kickstart собирается, но не работает из eeprom.
Хотя вроде бы ничего сложного: точно также загружается в iRAM загрузчиком процессора и должен работать. Но не работает.

В конфигурации линкера для сборки kickstart вообще вот что смущает:
Код
; Kickstart links code at the last 32K of IRAM. Although the code starts
; execution at address 0x00000000, it is immediately relocated to
; address 0x00038000 and then execution continues.
FLASH 0x00038000
{
; The executable region starts at the load region
        ER_RO +0
        {
                phy3250_kickstart.o (STARTUP, +FIRST)
                * (+RO)
        }

При таком раскладе .hex файл генерируется не в той области и L3K_BOOT.EXE выдает: Error: address in the input file out of range!

Ну и начало этого .hex файла такое:
Код
:040000050003800074
:020000040003F7
:10800000D300A0E300F02FE1101F11EE4C209FE5FC


А в нормальном съедобном примере такое:
Код
:0400000508000000EF
:020000040800F2
:1000000018F09FE518F09FE518F09FE518F09FE5C0


Если поменять в конфигурации линкера вот так:
Код
FLASH 0x08000000
{
то L3K_BOOT.EXE hex-файл съедает...

Может быть будут какие-нибудь рекомендации по написанию загрузчика, подскажите пожалуйста где копать? уже третий день на этом застрял... sad.gif
Ещё не знаю как можно отлаживать загрузчик в keil? Отладчик keil дурить начинает и всё...
В Keil есть примеры загрузчиков NOR и NAND. Они заливаются работают, но отлаживать их не получается.

Сообщение отредактировал ra9ftm - Nov 24 2009, 07:04
Go to the top of the page
 
+Quote Post
ra9ftm
сообщение Nov 25 2009, 10:42
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 8-01-09
Пользователь №: 43 014



Отвечу самому себе - если кому понадобится.
проблема, похоже, в утилите L3K_BOOT.EXE. Или в формате hex-файла (?)

Пришлось написать программку на Си, которая из .bin файла сделает массив на си, добавить в начало массива необходимые 8 байт (спец. идентификатор + размер) и всё работает.
kickstart к примеру теперь грузится из eeprom и загружает stage 1 loader.

Сообщение отредактировал ra9ftm - Nov 25 2009, 10:57
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 13:30
Рейтинг@Mail.ru


Страница сгенерированна за 0.01417 секунд с 7
ELECTRONIX ©2004-2016