feat: sync current parallel NAND implementation from templates
This commit is contained in:
@@ -47,5 +47,5 @@ int nand_init(void)
|
||||
```
|
||||
|
||||
После успешной инициализации прочитайте четыре байта ID и ожидайте
|
||||
`AD DC 80 95`. Ядро библиотеки работает только на чтение и удерживает `WP#`
|
||||
в активном низком уровне; PROGRAM/ERASE пока намеренно не реализованы.
|
||||
`AD DC 80 95`. Порт поддерживает PROGRAM/ERASE: ядро держит `WP#` в активном
|
||||
низком уровне между операциями и поднимает его только на время изменения NAND.
|
||||
|
||||
@@ -133,7 +133,8 @@ static void f103rc_delay_us(unsigned long us)
|
||||
static const parallel_nand_port_t f103rc_port = {
|
||||
f103rc_init, f103rc_select, f103rc_deselect,
|
||||
f103rc_write_command, f103rc_write_address, f103rc_write_data,
|
||||
f103rc_read_data, f103rc_is_ready, f103rc_set_wp, f103rc_delay_us
|
||||
f103rc_read_data, f103rc_is_ready, f103rc_set_wp, f103rc_delay_us,
|
||||
1
|
||||
};
|
||||
|
||||
const parallel_nand_port_t *parallel_nand_port_stm32f103rc(void)
|
||||
|
||||
@@ -57,3 +57,6 @@ int nand_init(void)
|
||||
Начальные тайминги намеренно консервативны. После запуска проверьте
|
||||
осциллографом длительности `WE#`/`RE#` и время установки данных. Ожидаемый ID
|
||||
HY27UF084G2M: `AD DC 80 95`.
|
||||
|
||||
Порт поддерживает PROGRAM/ERASE. `WP#` на `PG8` остаётся активным между
|
||||
операциями и снимается ядром только на время программирования или стирания.
|
||||
|
||||
@@ -174,7 +174,8 @@ static const parallel_nand_port_t f103ze_port = {
|
||||
f103ze_read_data,
|
||||
f103ze_is_ready,
|
||||
f103ze_set_write_protect,
|
||||
f103ze_delay_us
|
||||
f103ze_delay_us,
|
||||
1
|
||||
};
|
||||
|
||||
const parallel_nand_port_t *parallel_nand_port_stm32f103ze(void)
|
||||
|
||||
@@ -24,3 +24,8 @@
|
||||
`stm32f4xx_ll_fsmc.c`, включить FSMC и не создавать второй
|
||||
`NAND_HandleTypeDef` для Bank 2. Начальные тайминги
|
||||
консервативны; финальные значения подтвердить осциллографом.
|
||||
|
||||
В базовой схеме `WP#` аппаратно зафиксирован в активном уровне, поэтому порт
|
||||
объявляет `write_supported = 0`, а PROGRAM/ERASE возвращают
|
||||
`PNAND_ERROR_WRITE_PROTECTED`. Для записи назначьте отдельный GPIO с внешним
|
||||
pull-down, реализуйте управление `WP#` и включите признак поддержки порта.
|
||||
|
||||
@@ -84,7 +84,8 @@ static void f407_delay_us(unsigned long us)
|
||||
static const parallel_nand_port_t f407_port = {
|
||||
f407_init, f407_select, f407_deselect,
|
||||
f407_write_command, f407_write_address, f407_write_data,
|
||||
f407_read_data, f407_is_ready, f407_set_wp, f407_delay_us
|
||||
f407_read_data, f407_is_ready, f407_set_wp, f407_delay_us,
|
||||
0
|
||||
};
|
||||
|
||||
const parallel_nand_port_t *parallel_nand_port_stm32f407ve(void)
|
||||
|
||||
@@ -19,3 +19,6 @@ HAL только для инициализации, а циклы NAND выпо
|
||||
Выбранные `PB3/PB4` нельзя одновременно использовать для trace/JTAG; SWD на
|
||||
`PA13/PA14` остаётся доступен. Если эти пины нужны проекту, измените таблицу и
|
||||
операции шины: текущая оптимизация рассчитана на непрерывные `PB0..PB7`.
|
||||
|
||||
Порт поддерживает PROGRAM/ERASE через управляемый `WP#` на `PA5`. Внешний
|
||||
pull-down сохраняет защиту до инициализации GPIO и при сбросе МК.
|
||||
|
||||
@@ -125,7 +125,8 @@ static void g474_delay_us(unsigned long us)
|
||||
static const parallel_nand_port_t g474_port = {
|
||||
g474_init, g474_select, g474_deselect,
|
||||
g474_write_command, g474_write_address, g474_write_data,
|
||||
g474_read_data, g474_is_ready, g474_set_wp, g474_delay_us
|
||||
g474_read_data, g474_is_ready, g474_set_wp, g474_delay_us,
|
||||
1
|
||||
};
|
||||
|
||||
const parallel_nand_port_t *parallel_nand_port_stm32g474ce(void)
|
||||
|
||||
@@ -13,9 +13,10 @@
|
||||
Адреса C28x задаются в 16-битных словах: data `0x100000`, command
|
||||
`0x100001`, address `0x100002`. Используется только младший байт XINTF.
|
||||
|
||||
`WP#` в базовом варианте аппаратный: для режима только чтения соединить с GND
|
||||
через 10 кОм; если позже понадобится PROGRAM/ERASE, заменить на GPIO и реализовать
|
||||
`tms_set_wp()`.
|
||||
`WP#` в базовом варианте аппаратный и соединён с GND через 10 кОм. Поэтому
|
||||
порт объявляет `write_supported = 0`, а PROGRAM/ERASE возвращают
|
||||
`PNAND_ERROR_WRITE_PROTECTED`. Для записи нужно перенести `WP#` на GPIO,
|
||||
реализовать `tms_set_wp()` и установить признак поддержки в структуре порта.
|
||||
|
||||
Задержка в порте приблизительная. После выбора частоты CPU проверить импульсы
|
||||
осциллографом и при необходимости изменить `PNAND_TMS_CPU_MHZ`.
|
||||
|
||||
@@ -56,7 +56,8 @@ static void tms_set_wp(int enabled)
|
||||
static const parallel_nand_port_t tms_port = {
|
||||
tms_init, tms_select, tms_deselect,
|
||||
tms_write_command, tms_write_address, tms_write_data,
|
||||
tms_read_data, tms_is_ready, tms_set_wp, tms_delay_us
|
||||
tms_read_data, tms_is_ready, tms_set_wp, tms_delay_us,
|
||||
0
|
||||
};
|
||||
|
||||
const parallel_nand_port_t *parallel_nand_port_tms320f2812(void)
|
||||
|
||||
Reference in New Issue
Block a user