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

У nxp есть библиотека spifi, если правильно понял она для внешних микросхем памяти, в доке на нее перечень какие микросхемы она поддерживает, можно использовать внешнюю память для программ и загружаться из внешней памяти, если конечно правильно понимаю. Но исходников на саму библиотеку не нашел. Только готовый файл lib который подходит для iar и keil а для gcc не подходит. Можно гдето посмотреть исходники или может на похожую библиотеку что то есть?

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


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

Может есть библиотеки для чтения записи стирания Flash Memory AT25DF321A? Если я настрою spi на mode0 и функции чтения записи напишу, это правильно будет?

Может в контроллере lpc4337 уже есть интерфейс для такой памяти ?

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


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

Может есть библиотеки для чтения записи стирания Flash Memory AT25DF321A? Если я настрою spi на mode0 и функции чтения записи напишу, это правильно будет?

Может в контроллере lpc4337 уже есть интерфейс для такой памяти ?

 

AT25DF321A обычная себе память типа data-flash с возможностью стирания от 4к и постраничной записью. Работает через SPI. Если очень надо могу посмотреть в закромах процедуры работы с таким типом памяти. Производителя делают их совместимыми по опкодам и параметрам стирания-записи.

 

Посмотрите во вложении. Эта микросхема памяти поддерживает Deep Power Down Mode. Вы можете добавить 2 процедуры:

//--------------------------------
//процедура перевода памяти в режим DP
void setDP(void)
{
 SELECT_SPI(nSS_SFLASH); //выбираем устройство spi
 SPIWriteChar(MP25_DP); //запись кода команды
 DESELECT_SPI(); //отпускаем устройство spi
}
//--------------------------------

//--------------------------------
//процедура вывода памяти из режима DP
void releaceDP(void)
{
 SELECT_SPI(nSS_SFLASH); //выбираем устройство spi
 SPIWriteChar(MP25_RDP); //запись кода команды
 DESELECT_SPI(); //отпускаем устройство spi

 //время выхода из DP 30 uS
 for(volatile unsigned int i=0; i<(50*30); i++);
);
}
//--------------------------------

 

При инициализации памяти установите setDP(); И в каждой процедуре работы с памятью следует добавить releaceDP(); а перед выходом setDP();

Должно работать. Нужно только проверить опкоды и ввести корректные таймауты вхождения/выхода deep power down.

 

Также есть процедуры программного/аппаратного SPI. Если будет нужно могу поделится. Програмный не привязан к процессору, а аппаратный работает на LPC17.

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


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

Буду очень благодарен. Сейчас читаю доку на 4337 там на странице 609 описан этот интерфейс spifi, а это дока на библиотеку spifi Какая разница если использовать обычный spi или пользоваться spifi ?

Подозреваю что процессор видит страниц памяти по адресам, без нискоуровневых функций работы с spi чтения записи ./ не понимаю

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


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

Какая разница если использовать обычный spi или пользоваться spifi ?

Если я всё правильно понял, то после настройки spifi Вы можете получить доступ к внешней памяти как к отдельному адресному пространству, к которому есть доступ процессора. Думаю полезная вещь, если в ней разобраться.

 

По поводу SPI. Я просмотрел регистры LPC17 и LPC43. Разницы не увидел. Так что принимайте процедуры работы по SPI. В аппаратном есть контроль максимальной частоты работы переферийного устройства (для вашей микросхемы 66 МГц). Для настройки необходимо знать переферийную частоту тактирования SPI.

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


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

страница 610, абзац 3

SPI Flash devices respond to commands sent by software, or automatically sent by the

SPIFI when software reads the serial flash region of the memory map.

 

Определённо интересная вещь этот spifi. При обращении процессором к области памяти, отведённой под последовательную память, все манипуляции по работе с памятью берёт на себя spifi. Т.е. для программы это просто область памяти расположенная по определённому адресу.

Была бы такая штука в LPC17 я бы не поленился разобраться. Но если подумать - этот модуль есть только в LPC43 и потребует своей модели работы с внешней памятью. И если потребуется переносить проект или принцип организации работы с памятью на процессоры, где такого модуля нет, то придётся также менять и модель работы с внешней памятью.

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

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


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

Определённо интересная вещь этот spifi. При обращении процессором к области памяти, отведённой под последовательную память, все манипуляции по работе с памятью берёт на себя spifi. Т.е. для программы это просто область памяти расположенная по определённому адресу.

Так и есть память отображается в адресное пространство контроллера, из этой памяти может выполнятся програма (правда жудко медленно).

этот модуль есть только в LPC43

На сколько я помню в LPC18 тоже есть.

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


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

Так и есть память отображается в адресное пространство контроллера, из этой памяти может выполнятся програма (правда жудко медленно).

 

А зачем это тогда ? Может проше загружать простенькую прогу в память, которая затем перегружает часть памяти с флехи в память и запускается там...

 

Хотя тоже не вариант, когда есть нормальный флеш в контроллере. Если дак только константы какие грузить.

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


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

Смотрю доку на библиотеку ,но не могу найти как читать функциями этой библиотеки, как писать, стирать все понятно, а как читать?

Можно воспользоваться memcpy, но если есть такая библиотека что же в ней нет функции чтения ?

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


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

Смотрю доку на библиотеку ,но не могу найти как читать функциями этой библиотеки, как писать, стирать все понятно, а как читать?

Можно воспользоваться memcpy, но если есть такая библиотека что же в ней нет функции чтения ?

 

Видимо она и не нужна. В доках на процессор указывается что при обращении к памяти, на которую отображается внешняя flash, SPIFI задействуется автоматически.

 

Вероятно всё должно работать так:

#define EXT_FLASH_ADDR 0x01234567 //это условный адрес, реальный надо смотреть в доках
unsigned char ext_flash_buff[1024] @EXT_FLASH_ADDR;
unsigned char local_buff[1024];
for(unsigned int i=0; i<1024; i++)  local_buff[i] = ext_flash_buff[i]; //тут SPIFI будет задействован автоматически

 

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


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

Работает ваш код, через копирование по указателям. Думал что есть специальная функция чтения. А так удобно. пользоваться этим spifi. К стати работает под gcc )) проверил.

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


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

Работает ваш код, через копирование по указателям. Думал что есть специальная функция чтения. А так удобно. пользоваться этим spifi. К стати работает под gcc )) проверил.

 

А запись работает через указатели? Или только через процедуры из библиотеки?

 

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


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

Была бы такая штука в LPC17 я бы не поленился разобраться.

Дык - есть оно в LPC17x ;)

Конкретно: LPC1773

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


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

Для записи использую функцию из библиотеки spifi_program а для чтения копирование по указателям.

Может кому пригодиться пример как использовать spifi без библиотеки

собранная библиотека для m0 m4 keil iar но и с gcc работает тоже

Вот так использую не знаю насколько правильно но код работает,может что подправите или посоветуете?

//---------------------------------------------------------------------------------------------------//
void at25df_Read(void* buffer, uint32_t addrsoffsetstruct, uint32_t sizett) {

int i;
opers.dest = (char *) (obj.base + addrsoffsetstruct);
opers.length  = sizett;
opers.scratch = NULL;
opers.options = S_VERIFY_PROG;
opers.protect = -1;



for(i = 0; i < sizett; i++)
{
	((char*)buffer)[i] = ((char*)opers.dest)[i];
}

UART_printf("Read flash ok.....\r\n");

}
//---------------------------------------------------------------------------------------------------//
void at25df_Erase(uint32_t addrsoffsetstruct, uint32_t sizett) {

opers.dest = (char *) (obj.base + addrsoffsetstruct);
opers.length = sizett;
opers.scratch = NULL;
opers.options = S_FORCE_ERASE;
opers.protect = -1;

// Erase Device
if (pSpifi->spifi_erase(&obj, &opers)) {
	UART_printf("ERROR Erace.....\r\n");

} else {
	UART_printf("Erace flash ok.....\r\n");
}

}
//---------------------------------------------------------------------------------------------------//
void at25df_Write(void* buffer, uint32_t addrsoffsetstruct, uint32_t sizett) {

opers.dest = (char *) (obj.base + addrsoffsetstruct);
opers.length = sizett;
opers.scratch = NULL;
opers.options = S_VERIFY_PROG;
opers.protect = -1;


if (pSpifi->spifi_program(&obj, (char *) buffer, &opers)) {
	UART_printf("ERROR write....\r\n");
} else {
	UART_printf("Write flash ok.....\r\n");
}

}
//---------------------------------------------------------------------------------------------------//

 

Стирание работает только секторами.

Изменено пользователем IgorKossak
[codebox] для длинного кода, [code] - для короткого!!!

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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