2.5 KiB
Порт STM32F103RCT6 для HY27UF084G2M
У STM32F103RCT6 корпус LQFP64. Согласно datasheet STM32F103xC/D/E, функция
FSMC в этом корпусе недоступна, поэтому порт выполняет асинхронные NAND-циклы
через GPIO.
Соединения
Шина данных:
I/O0 → PB0, вывод MCU 26;I/O1 → PB1, вывод MCU 27;I/O2 → PB2, вывод MCU 28;I/O3 → PB3, вывод MCU 55;I/O4 → PB4, вывод MCU 56;I/O5 → PB5, вывод MCU 57;I/O6 → PB6, вывод MCU 58;I/O7 → PB7, вывод MCU 59.
Управляющие сигналы:
CLE → PC0, вывод MCU 8;ALE → PC1, вывод MCU 9;WE# → PC2, вывод MCU 10;RE# → PC3, вывод MCU 11;CE# → PC4, вывод MCU 24;WP# → PC5, вывод MCU 25;R/B# → PC6, вывод MCU 37.
Питание NAND — 3,3 В. На каждый вывод питания нужен 100 нФ, рядом с чипом —
1–4,7 мкФ. R/B# имеет открытый сток и требует внешней подтяжки 4,7–10 кОм
к 3,3 В. Не оставляйте WP# неподключённым.
PB2 также является BOOT1: NAND держит I/O в высокоимпедансном состоянии
до командного цикла, но штатную конфигурацию загрузки платы всё равно нужно
обеспечить подтяжкой. PB3/PB4 заняты JTAG; порт отключает JTAG и сохраняет
SWD на PA13/PA14.
Подключение к проекту Cube/HAL
Добавьте parallel_nand_port_stm32f103rc.c, путь к его заголовку и включите
GPIO HAL. Инициализация:
#include "parallel_nand.h"
#include "parallel_nand_port_stm32f103rc.h"
static parallel_nand_t nand;
int nand_init(void)
{
return parallel_nand_init(
&nand,
parallel_nand_port_stm32f103rc(),
¶llel_nand_hy27uf084g2m_geometry);
}
После успешной инициализации прочитайте четыре байта ID и ожидайте
AD DC 80 95. Ядро библиотеки работает только на чтение и удерживает WP#
в активном низком уровне; PROGRAM/ERASE пока намеренно не реализованы.