Как работать с W25Q32FV SPI FLASH? - PullRequest
0 голосов
/ 29 мая 2018

Когда я начинал с SPI FLASH из winbond W25Q32FV с STM32F103RCT6 CORTEX M3.Я сталкиваюсь с реальной проблемой понимания того, как все должно работать.

Я использую CUBEMX.Сначала я выбрал RCC в качестве кристаллического / керамического резонатора и настроил свои часы на 72 МГц.Затем я настроил SPI1 как ПОЛНЫЙ ДУПЛЕКС-МАСТЕР.Там у меня есть только 3 контакта (PA5 - SCK, PA6- MISO, PA7 - MOSI), поэтому я настроил вывод CS как GPIO OUTPUT на PA2.

Теперь для записи на флэш-память?Что мне нужно сделать в первую очередь?Какие шаги мне нужно следовать?

Пока я сначала ссылаюсь на таблицу, мне нужно включить запись (0x06).Затем мне нужно отправить программу страницы (0x02), а затем мне нужно отправить 24-битный адрес.Затем мне нужно отправить как минимум 1 байт данных.Все эти процедуры произойдут, когда CS будет низким, а затем после отправки всего этого CS будет высоким.

Затем я отключаю запись Enable, т.е. запись отключена (0x04).

После этого япытаясь прочитать данные с этого адреса, поэтому я отправляю данные чтения (0x03) и 24-битный адрес.Затем получить данные в буфер.

Вот пример кода:

    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
    HAL_Delay(10);
    SPI_TX_BUFF[0] = 0x06;
    SPI_TX_BUFF[1] = 0x02;
    SPI_TX_BUFF[2] = 0x00;
    SPI_TX_BUFF[3] = 0x00;
    SPI_TX_BUFF[4] = 0x01;
    SPI_TX_BUFF[5] = 0x11;
    HAL_SPI_Transmit(&hspi1, SPI_TX_BUFF, 6, 50);
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
    HAL_Delay(100);

    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
    HAL_Delay(10);
    SPI_TX_BUFF[0] = 0x04;
    HAL_SPI_Transmit(&hspi1, SPI_TX_BUFF, 1, 50);
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
    HAL_Delay(100);

    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
    HAL_Delay(10);
    SPI_TX_BUFF[0] = 0x03;
    SPI_TX_BUFF[1] = 0x00;
    SPI_TX_BUFF[2] = 0x00;
    SPI_TX_BUFF[3] = 0x01;
    HAL_SPI_Transmit(&hspi1, SPI_TX_BUFF, 4, 50);
    HAL_SPI_Receive(&hspi1, SPI_RX_BUFF, 1, 50);
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
    HAL_Delay(100);

Этот код не работает.Более того, после перепрошивки кода я даже не могу войти в режим отладки.Там написано, что цель не связана.Я знаю, что делаю что-то не так и нуждаюсь в небольшом руководстве.Мне просто нужно знать, какие шаги необходимо предпринять, чтобы успешно инициировать, писать и читать из spi flash.

Как будто я запутался в нескольких вещах

  1. Здесь я непосредственно посылаю разрешение записи в качестве моей первой команды.Здесь я должен отправить идентификатор сначала?Я имею в виду, как инициировать и сообщить MCU, что у него есть вспышка, подключенная к штырьковым контактам.

2.Как отправить 24-битный адрес?С какого начального адреса я начинаю записывать данные во флэш-память?

3. Когда флэш-память просто мигает.MCU работает нормально, но когда я прошил этот код, почему предупреждение не подключено.Затем я должен нажать Сброс и стереть все.

Любая помощь будет оценена.

Заранее спасибо.

...