Когда я начинал с 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.
Как будто я запутался в нескольких вещах
- Здесь я непосредственно посылаю разрешение записи в качестве моей первой команды.Здесь я должен отправить идентификатор сначала?Я имею в виду, как инициировать и сообщить MCU, что у него есть вспышка, подключенная к штырьковым контактам.
2.Как отправить 24-битный адрес?С какого начального адреса я начинаю записывать данные во флэш-память?
3. Когда флэш-память просто мигает.MCU работает нормально, но когда я прошил этот код, почему предупреждение не подключено.Затем я должен нажать Сброс и стереть все.
Любая помощь будет оценена.
Заранее спасибо.