Files
templates/ports/stm32f103rc/README.md

2.5 KiB
Raw Blame History

Порт 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 нФ, рядом с чипом — 14,7 мкФ. R/B# имеет открытый сток и требует внешней подтяжки 4,710 кОм к 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(),
        &parallel_nand_hy27uf084g2m_geometry);
}

После успешной инициализации прочитайте четыре байта ID и ожидайте AD DC 80 95. Ядро библиотеки работает только на чтение и удерживает WP# в активном низком уровне; PROGRAM/ERASE пока намеренно не реализованы.