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

Не получается соединить STM32L152 и N25Q128!

Если это Micron Serial NOR Flash Memory то работал с N25Q256 и N25Q512. Они подобные. По размеру отличаются только.

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


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

Да оно! Не могу записать в память
Или что-то неправильно делаете, или память дохлая или процессор или замыкание на плате. Вероятнее всего первое.

 

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


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

Подключена как? Extended SPI режим или полный? Если extended то проверить куда подключены ноги "Write protect" и "Hold".

Чтение с нее выполняется? Если можно прочитать то:

1. читаем статус командой RDSR.

2. проверяем в ответе бит WEL - Write Enable

3. если он не выставлен - разрешаем запись через команду WREN

 

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


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

Или что-то неправильно делаете, или память дохлая или процессор или замыкание на плате. Вероятнее всего первое.

Также стоит проверить биты защиты BP0:3 в регистре состояния. Мне встречались модели NOR Flash, у которых по-умолчанию все сектора были защищены от записи

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


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

Если ничего не меняю изначально, то режим Extended SPI, так?!! Ноги подвешены к питанию VCC! Отсылаю команду 05h read status register, ответ 00h. Следовательно бит write enable =0. Делаю команду write enable 06h, опять читаю status register тоже самое 00h.

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


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

Если ничего не меняю изначально, то режим Extended SPI, так?!! Ноги подвешены к питанию VCC! Отсылаю команду 05h read status register, ответ 00h. Следовательно бит write enable =0. Делаю команду write enable 06h, опять читаю status register тоже самое 00h.

Скорее всего, что-то не то в настрйках интерфейса. Добейтесь нормального ответа на команду Read Id.

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


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

Если ничего не меняю изначально, то режим Extended SPI, так?!! Ноги подвешены к питанию VCC! Отсылаю команду 05h read status register, ответ 00h. Следовательно бит write enable =0. Делаю команду write enable 06h, опять читаю status register тоже самое 00h.

 

ну причин много если даже чтения нет:

- дохлый чип

- неверно подключен

- неверно инициализирован SPI на процессоре

 

CS программный или аппаратный?

 

посмотреть бы еще на инициализацию SPI В программе

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


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

При команде read id 9eh выдает : 00 c1 00 00 00 01 00 00 01 00 06 00 08 40 00 00 e0 00 00 00 при 9fh тоже самое выдает

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


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

При команде read id 9eh выдает : 00 c1 00 00 00 01 00 00 01 00 06 00 08 40 00 00 e0 00 00 00 при 9fh тоже самое выдает

 

это, imho, кривой ответ.

 

на основании DS ответ на эту команду от памяти должен начинаться так:

20h, BAh, 18h, ...

т.е. надо начинать смотреть с подключения и инициализации SPI в программе

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


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

При команде read id 9eh выдает : 00 c1 00 00 00 01 00 00 01 00 06 00 08 40 00 00 e0 00 00 00 при 9fh тоже самое выдает

Ну вот видите, совсем не то что должно быть. Проверяйте настройки интерфейса.

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


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

Инициализация порта:

 

RCC->AHBENR |= RCC_AHBENR_GPIOBEN;

 

//PB15(MOSI), PB14(MISO), PB13(SCK), PB12(NSS) - AF, Push-Pull, AF5(SPI1)

GPIOB->MODER |= GPIO_MODER_MODER15_1 | GPIO_MODER_MODER14_1 | GPIO_MODER_MODER13_1 | GPIO_MODER_MODER12_1; //Alternate function

GPIOB->OTYPER &= ~(GPIO_OTYPER_OT_15 | GPIO_OTYPER_OT_14 | GPIO_OTYPER_OT_13 | GPIO_OTYPER_OT_11); //Push-Pull

GPIOB->AFR[1] |= (5<<28 | 5<<24 | 5<<20 | 5<<16); //PB15, PB14, P13, PB12 = AF5

 

 

Инициализация spi:

 

RCC->APB1ENR |= RCC_APB1ENR_SPI2EN; // SPI2

SPI2->CR1 |= SPI_CR1_BR_2 | SPI_CR1_BR_0; //Baud rate

SPI2->CR1 &= ~SPI_CR1_CPOL; //

SPI2->CR1 &= ~SPI_CR1_CPHA; //

SPI2->CR1 &= ~SPI_CR1_DFF; //8

SPI2->CR1 &= ~SPI_CR1_LSBFIRST; //MSB

SPI2->CR1 |= SPI_CR1_SSM; // NSS

SPI2->CR1 |= SPI_CR1_SSI; //

SPI2->CR1 |= SPI_CR1_MSTR; // Master

SPI2->CR1 |= SPI_CR1_SPE; // SPI2 enable

 

 

Функция отправки байта:

 

void spi_s(uint8_t data) {

SPI2->DR = data;

while(!(SPI2->SR & SPI_SR_TXE));

 

К примеру отсылка команды 06h:

 

SPI2->CR2 |= SPI_CR2_SSOE; программно понижаю СS

spi_s(0x06); отправляю 06h

for (i=0;i<100;i++); небольшую задержку чтоб точно все успело уйти

SPI2->CR2 &= ~SPI_CR2_SSOE; программно повышаю СS

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

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


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

Инициализация порта:

 

SKIP

 

Функция отправки байта:

 

void spi_s(uint8_t data) {

SPI2->DR = data;

while(!(SPI2->SR & SPI_SR_TXE));

 

К примеру отсылка команды 06h:

 

SPI2->CR2 |= SPI_CR2_SSOE; программно понижаю СS

spi_s(0x06); отправляю 06h

for (i=0;i<100;i++); небольшую задержку чтоб точно все успело уйти

SPI2->CR2 &= ~SPI_CR2_SSOE; программно повышаю СS

 

инициализация верно а вот передача/прием как то странно.

 

не думаю что CS при такой инициализации будет верно работать.

я инициализирую только MOSI,MISO,CLK ноги а CS дергаю сам как физическую

 

и задержка не нужна если сделать вот так

 

uint8_t spi_s(uint8_t data)

{

SPI2->DR = data;

while (!(SPI2->SR & SPI_SR_RXNE));

return SPI2->DR;

}

 

 

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


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

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

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

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

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

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

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

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

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

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