Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/43: Рейтинг темы: голосов - 43, средняя оценка - 5.00
tmttyb
0 / 0 / 0
Регистрация: 17.03.2012
Сообщений: 488
1

LPC2468: запись SPI-флеш 25P64V6P, какие-то глюки с SSP0DR

19.12.2014, 08:41. Просмотров 7827. Ответов 1
Метки нет (Все метки)

Тему обновил!
В устройстве есть плата на LPC2468 с SPI-флеш ST25P64V6P. Стал смотреть как в оригинальной программе идёт работа с этой флеш. Почему-то для нормальной работы нужно считать 8 байт по SPI, после чего чтение работает нормально. Иначе считываются 0xFF, либо какие-то ранее считанные байты. И то, сразу после включения этот метод в первый раз даёт неправильный результат считывания.

Так выглядит инициализация SPI:
Код
SSP0CR0   =   0x01c7;
SSP0CR1   =   0x00;
SSP0CPSR   =   0x10;
SSP0IMSC   =   0x00;
SSP0CR1   =   0x02;
Чтобы избавиться от глюка с чтением сразу после включения, я добавил следующий код:
Код
IOCLR1=0x00200000;
SSP0DR=0xFF;
while(SSP0SR&0x04) SSP0DR;
IOSIT1=0x00200000;
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2014, 08:41
Ответы с готовыми решениями:

GNS3 + virtualbox (какие то глюки с vlan)
Всем привет.. замучился искать проблему. Имеется cisco c2691 + модуль NM-16ESW и виртуальная...

Какие-то непонятные глюки Visual Studio 2017 и 2019
Собственно вот. Основная рабочая у меня 2017, и 2019 висит на побаловаться. Уже дня три или четыре...

VinculumII. Чтение и запись по SPI
Не так давно устроился на работу, и первым моим микроконтроллером оказался Vinculum II. Мне...

Запись параметров во флеш.
Контролер STM32F303. Раньше я пользовался EEPROM emulation. Библиотека от ST которая емулирует...

Кнопка следующая запись, предыдущая запись---какие коды
Подскажите пожалуйста коды на кнопки, выполняющие функции "следующая запись, предыдущая запись", по...

1
tmttyb
0 / 0 / 0
Регистрация: 17.03.2012
Сообщений: 488
19.12.2014, 19:33 2
Вот выдрал из оригинала примерную процедуру чтения байта по SPI:
Код
IOCLR1=0x00200000;

//посылаем в флеш команду на считывание из нулевого адреса
SSP0DR=0x03;
SSP0DR=0x00;
SSP0DR=0x00;
SSP0DR=0x00;

while((SSP0SR&0x10)){};

// (!!!) непонятно только во это: зачем считывается 8 раз?
TmpByte=SSP0DR;
TmpByte=SSP0DR;
TmpByte=SSP0DR;
TmpByte=SSP0DR;
TmpByte=SSP0DR;
TmpByte=SSP0DR;
TmpByte=SSP0DR;
TmpByte=SSP0DR;

// пишем 0xff, чтобы принять один байт

SSP0DR=0xff;

while(!(SSP0SR&0x04)){};

// приняли байт
TmpByte=SSP0DR;
Это код из оригинала. Я его немного облагородил, но ошибка воспроизводини. В первый вызов после включения глючит и считывает неправильный байт. Поэтому автор видимо и вызывает его перед основным чтением дополнительно один раз.

Попробовал немного доработать:
Код
void spiReadFtosh(unsykned char a1,
unsykned char a2,
unsykned char a3,
unsykned char cnt)
{
int i;

IOCLR1=0x00200000;

SSP0DR=0x03;
SSP0DR=a1;
SSP0DR=a2;
SSP0DR=a3;

while(SSP0SR&0x10){};
while(SSP0SR&0x04) SSP0DR;

for (i=0;i<cnt;i++)
{
SSP0DR=0xff;
while(!(SSP0SR&0x04)){};
spidata[i]=SSP0DR;
}

IOSIT1=0x00200000;

}
Как видно, для корректной работы приходится вызывать while(SSP0SR&0x04) SSP0DR; причём этот цикл может пройти неодинаковое количество раз. Вроде бы по логике работы spi должно прийти 4 байта (послали 4, считали 4). Здесь:
Код
SSP0DR=0x03;
SSP0DR=a1;
SSP0DR=a2;
SSP0DR=a3;
Т.е. после этого вызвать SSP0DR;SSP0DR;SSP0DR;SSP0DR (чтение без анализа результата). А затем послав SSP0DR=0xFF считать байт b=SSP0DR. Но тут какой-то глюк, никак не пойму зачем читать восемь байт, и почему сразу после включения приходят ещё какие-то байты, т.е. количество вызовов записи SSP0DR=... и чтения ...=SSP0DR не совпадает.
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.12.2014, 19:33

Заблокировать запись на флеш накопитель
Не знаю в какой раздел лучше отнести данную тему. Состоит вопрос в чем. Нужно написать некую...

Запись видео с флеш-проигрывателя
доброго времени суток. как то думал я о видео в интернете и решил что нибудь про это раскопать. ...

LPC2468 + UART
Недавно начал изучать ARM. На первый раз решил сделать UART. В целом что-то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.