• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

flash_api

sharikov

Active member
Смотрю на flash_api.c кое чего не понимаю.

В конце функций вызывается SpicDisableRtl8195A которая отключает маппинг пинов SPIC. А как же отображение флэш в адресное пространство процессора, оно же сломается.
Получается 1 вызов flash_api и все, прощай магия ?
Вообще непонятно зачем при каждом обращении порт включают и выключают, кроме тормозов от этого пользы никакой.
 

pvvx

Активный участник сообщества
Смотрю на flash_api.c кое чего не понимаю.

В конце функций вызывается SpicDisableRtl8195A которая отключает маппинг пинов SPIC. А как же отображение флэш в адресное пространство процессора, оно же сломается.
Оно отключается, чтобы случайно, при слете и прочих делах не было записи.
Но можно было отключить функцию записи в конг.регистрах SPIC. Писатели SDK пошли по другому пути - отключают полностью.
Для обращения к Flash необходимо взять семафор (или как там его), а по отключению - отдать.
evice_mutex_lock(RT_DEV_LOCK_FLASH);
device_mutex_unlock(RT_DEV_LOCK_FLASH);
Они уже созданы в SDK (device_lock.h) для:
Код:
typedef enum _RT_DEV_LOCK_E
{
    RT_DEV_LOCK_EFUSE = 0,
    RT_DEV_LOCK_FLASH = 1,
    RT_DEV_LOCK_CRYPTO = 2,
    RT_DEV_LOCK_MAX = 3
}RT_DEV_LOCK_E;
Так-же не желательно использовать свою [inline]flash_t flash;[/inline] если она в системе одна. Есть и ошибки в SDK с Flash, но вроде исправил... При инициализации SPIC создается массив структур для нескольких Flash на разных CS и разных режимах SIO, DIO, QIO и для разных CLK проца(!) (в процедуре калибровки выбирается и тестируется максимальная производительность). Эти данные для обращения к Flash копируются в структуру flash_t flash; но только для данного CS, режима и CLK CPU при инициализации. А инициализация происходит не всегда - там путанно всё и не поддерживается до конца. Исправил как смог - писатели SDK не дописали эту часть - забыли наверно... Я тоже забыл синхронизовать это с версией в git.
Скинул:
RTL00MP3/flash_api.c at master · pvvx/RTL00MP3 · GitHub
Иначе SPIC работал в SIO режиме. Что-то ещё правил в начальной инициализации, чтобы Flash работала в DIO и процедуре калибровки на максимальную скорость (параметры SPIC после неё сохраняются в Flash, если были не записаны ранее). Возможно и не отсинхронизовал в git. Потом гляну... работать всё равно будет, хоть и тормознее :)
Калибровки SPIC, SDRAM контроллеров сохраняются в Flash. Если они уже записаны, то процедуры калибровок не вызываются. Т.е. калибровки отрабатывают при первом старте с чистой Flash.
С ними ещё много проблем - нет исходников стартового модуля и на RTL871xAF при каждом старте делается тест SDRAM и прочие глупости, когда там её нет. Кто это будет доделывать для всех - пока не знаю. Всем пофиг.
Мой кусок "реверса" загрузчиков пока не работает - не доделан. Он замещается бинарником от базового SDK. В Arduino - другой бинаник.
 
Последнее редактирование:

sharikov

Active member
Код:
/mnt/w2/rtl8710/RTL00MP3/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/flash_api.c: In function 'flash_otp_read':
/mnt/w2/rtl8710/RTL00MP3/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/flash_api.c:617:29: error: 'FLASH_CMD_EOTPM' undeclared (first use in this function)
   SpicTxCmdWithDataRtl8195A(FLASH_CMD_EOTPM, 0, 0, flashobj.SpicInitPara); // enter secured OTP
наверно hal_spi_flash.h не обновили
 

pvvx

Активный участник сообщества
Код:
/mnt/w2/rtl8710/RTL00MP3/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/flash_api.c: In function 'flash_otp_read':
/mnt/w2/rtl8710/RTL00MP3/RTL00_SDKV35a/component/common/mbed/targets/hal/rtl8195a/flash_api.c:617:29: error: 'FLASH_CMD_EOTPM' undeclared (first use in this function)
   SpicTxCmdWithDataRtl8195A(FLASH_CMD_EOTPM, 0, 0, flashobj.SpicInitPara); // enter secured OTP
наверно hal_spi_flash.h не обновили
Сейчас проверю и синхронизну...
----
Вроде всё. Скопировал из рабочей версии всё в куче и проверил (скачал в zip, экспортнул, странслировал, загрузил в модуль - пашет)
 
Последнее редактирование:

sharikov

Active member
Вроде всё. Скопировал из рабочей версии всё в куче и проверил (скачал в zip, экспортнул, странслировал, загрузил в модуль - пашет)
Компилируется.

Еще вопрос:
В чем разница между SpicUserReadRtl8195A и SpicUserReadFourByteRtl8195A ?
Вторая на 1 такт/байт быстрее. Видимо у нее что-то должно быть выровнено на 4 байта, вопрос что именно.
 

pvvx

Активный участник сообщества
Компилируется.

Еще вопрос:
В чем разница между SpicUserReadRtl8195A и SpicUserReadFourByteRtl8195A ?
Вторая на 1 такт/байт быстрее. Видимо у нее что-то должно быть выровнено на 4 байта, вопрос что именно.
IDA в помощь. Obj очень хорошо переводятся в CИ, который можно читать.
Вообще данные функции написаны без оптимизации. Там можно сильно оптимизнуть. Видно, что вставляли поспешно - по тому с исходниками постеснялись(?) :) ...
Так и не понял зачем там выравнивание на границу четности в 4 байта - доступ к памяти в RTL побайтный...
Из IDA без всяких предустановок - попробуйте сделать исходник, как это сделал из таки-же в других случаях:
 

Вложения

Последнее редактирование:

sharikov

Active member
IDA в помощь. Obj очень хорошо переводятся в CИ, который можно читать.
Вообще данные функции написаны без оптимизации. Там можно сильно оптимизнуть. Видно, что вставляли поспешно - по тому с исходниками постеснялись(?) :) ...
Так и не понял зачем там выравнивание на границу четности в 4 байта - доступ к памяти в RTL побайтный...
Для SpicUserReadFourByteRtl8195A length и * data обязательно должны быть кратны 4 байтам. Адрес флэш памяти не обязательно должен быть выровнен.

SpicUserReadRtl8195A при невыровенном адресе буфера работает медленнее на 1 такт.
SpicUserReadFourByteRtl8195A выровеннный - 10 такт/байт
SpicUserReadRtl8195A выровенный - 11 такт/байт
SpicUserReadRtl8195A невыровенный - 12 такт/байт

Функции в rom писали без оптимизации возможно чтобы снизить количество багов.

Доступ к памяти побайтный а к фифо spic - нет. Также невыровенный доступ медленнее.
 

pvvx

Активный участник сообщества
Замеры надо производить с "откалиброванным" SPIC. Начальные значения всех регистров, до старта многих инициализаций, можно посмотреть в Jtag или прямо во встроенном мониторе в ROM, если чип flash стерт. Можно и в AT прошивке, т.е. уже после инициализации SPIC на DIO:

# ATSV (Версия AT):
DeviceID: FC, Flash Size: 1048576 bytes, FlashID: C22014/1, SpicMode: DIO
v2.2.1,v3.5(2017/02/02-09:48:00)

Сам SPIC:
Код:
40006000:    01040300    00000000    00000000    00000000
40006010:    00000001    00000001    00000000    0000001F
40006020:    00000000    00000000    00000006    000001FF
40006030:    0000000C    0000000C    00000000    00000000
40006040:    00000000    00000000    00000000    00000000
40006050:    00000000    00000000    00010001    40470603
40006060:    40470603    40470603    40470603    40470603
40006070:    40470603    40470603    40470603    40470603
40006080:    40470603    40470603    40470603    40470603
40006090:    40470603    40470603    40470603    40470603
400060A0:    40470603    40470603    40470603    40470603
400060B0:    40470603    40470603    40470603    40470603
400060C0:    40470603    40470603    40470603    40470603
400060D0:    40470603    40470603    40470603    40470603
400060E0:    0000000B    0000003B    0000003B    0000006B
400060F0:    000000EB    00000002    000000A2    000000A2
40006100:    00000032    00000038    00000006    00000005
40006110:    00000051    00000001    00000003    20030012
40006120:    00000202    0000000E    00000000    00000000
40006130:    00000000    00000000    00000000    00000000
40006140:    00000000    00000000    00000000    00000000
40006150:    00000000    00000000    00000000    00000000
40006160:    00000000    00000000    00000000    00000000
40006170:    00000000    00000000    00000000    00000000
40006180:    00000000    00000000    00000000    00000000
40006190:    00000000    00000000    00000000    00000000
400061A0:    00000000    00000000    00000000    00000000
400061B0:    00000000    00000000    00000000    00000000
400061C0:    00000000    00000000    00000000    00000000
400061D0:    00000000    00000000    00000000    00000000
400061E0:    00000000    00000000    00000000    00000000
400061F0:    00000000    00000000    00000000    00000000
40006200:    01040300    00000000    00000000    00000000
40006210:    00000001    00000001    00000000    0000001F
40006220:    00000000    00000000    00000006    000001FF
40006230:    00000004    00000004    00000000    00000000
40006240:    00000000    00000000    00000000    00000000
40006250:    00000000    00000000    00010001    40470603
40006260:    40470603    40470603    40470603    40470603
40006270:    40470603    40470603    40470603    40470603
40006280:    40470603    40470603    40470603    40470603
40006290:    40470603    40470603    40470603    40470603
400062A0:    40470603    40470603    40470603    40470603
400062B0:    40470603    40470603    40470603    40470603
400062C0:    40470603    40470603    40470603    40470603
400062D0:    40470603    40470603    40470603    40470603
400062E0:    0000000B    0000003B    0000003B    0000006B
400062F0:    000000EB    00000002    000000A2    000000A2
40006300:    00000032    00000038    00000006    00000005
40006310:    00000051    00000001    00000003    20030012
40006320:    00000202    0000000E    00000000    00000000
40006330:    00000000    00000000    00000000    00000000
40006340:    00000000    00000000    00000000    00000000
40006350:    00000000    00000000    00000000    00000000
40006360:    00000000    00000000    00000000    00000000
40006370:    00000000    00000000    00000000    00000000
40006380:    00000000    00000000    00000000    00000000
40006390:    00000000    00000000    00000000    00000000
400063A0:    00000000    00000000    00000000    00000000
400063B0:    00000000    00000000    00000000    00000000
400063C0:    00000000    00000000    00000000    00000000
400063D0:    00000000    00000000    00000000    00000000
400063E0:    00000000    00000000    00000000    00000000
400063F0:    00000000    00000000    00000000    00000000
Конфиг SoC
Код:
40000000:    FF780007    00000000    C0000011    00000000
40000010:    00000017    00000001    00000000    00000000
40000020:    16628195    004959D5    4A814000    0000E404
40000030:    00000001    00000000    02000000    00000000
40000040:    003CC700    00000000    AABB4003    00003C02
40000050:    00000000    00000000    00000000    0000009F
40000060:    2083FF03    900049EE    00000000    00000000
40000070:    00780003    00A85800    00800028    00000000
40000080:    00000000    00000000    00000000    00000000
40000090:    003F0000    00000000    00000000    00000000
400000A0:    00000000    00000000    00000000    00000000
400000B0:    00000000    00000000    00000000    EAEAEAEA
400000C0:    00000000    00000000    00000000    00000000
400000D0:    00000000    00000000    00000000    00000000
400000E0:    00000020    00000000    D030F8FC    04000000
400000F0:    00000000    00000000    00000000    00000000
40000100:    00000000    EAEAEAEA    00000000    EAEAEAEA
40000110:    00000000    00000000    00000000    EAEAEAEA
40000120:    FF000000    00000000    EAEAEAEA    EAEAEAEA
40000130:    00000000    00000001    EAEAEAEA    EAEAEAEA
40000140:    EAEAEAEA    EAEAEAEA    EAEAEAEA    EAEAEAEA
40000150:    EAEAEAEA    EAEAEAEA    EAEAEAEA    EAEAEAEA
40000160:    EAEAEAEA    EAEAEAEA    EAEAEAEA    EAEAEAEA
40000170:    EAEAEAEA    EAEAEAEA    EAEAEAEA    EAEAEAEA
40000180:    EAEAEAEA    EAEAEAEA    EAEAEAEA    EAEAEAEA
40000190:    EAEAEAEA    EAEAEAEA    EAEAEAEA    EAEAEAEA
400001A0:    EAEAEAEA    EAEAEAEA    EAEAEAEA    EAEAEAEA
400001B0:    EAEAEAEA    EAEAEAEA    EAEAEAEA    EAEAEAEA
400001C0:    EAEAEAEA    EAEAEAEA    EAEAEAEA    EAEAEAEA
400001D0:    EAEAEAEA    EAEAEAEA    EAEAEAEA    EAEAEAEA
400001E0:    EAEAEAEA    EAEAEAEA    EAEAEAEA    EAEAEAEA
400001F0:    41000220    00010301    00000003    00000000
40000200:    00000000    FFFFFFEF    EAEAEAEA    EAEAEAEA
40000210:    00211117    00010000    00000004    00000101
40000220:    00000004    EAEAEAEA    EAEAEAEA    EAEAEAEA
40000230:    0300DFC4    00000030    01000000    00000000
40000240:    00000000    00000003    00000000    EAEAEAEA
40000250:    00000400    EAEAEAEA    EAEAEAEA    EAEAEAEA
40000260:    EAEAEAEA    EAEAEAEA    EAEAEAEA    EAEAEAEA
40000270:    00000001    00110000    00003046    00000000
40000280:    00000100    00000000    00000000    00000000
40000290:    EAEAEAEA    EAEAEAEA    EAEAEAEA    EAEAEAEA
400002A0:    00000000    00000000    00000000    00000000
400002B0:    EAEAEAEA    EAEAEAEA    EAEAEAEA    EAEAEAEA
400002C0:    00110010    EAEAEAEA    EAEAEAEA    EAEAEAEA
400002D0:    EAEAEAEA    EAEAEAEA    EAEAEAEA    EAEAEAEA
400002E0:    00000000    00000000    EAEAEAEA    EAEAEAEA
400002F0:    EAEAEAEA    EAEAEAEA    EAEAEAEA    EAEAEAEA
40000300:    00000029    1FC00002    00000000    EAEAEAEA
40000310:    EAEAEAEA    EAEAEAEA    00000000    EAEAEAEA
40000320:    000000FF    000000FF    EAEAEAEA    EAEAEAEA
40000330:    AA882AAA    AAAAA000    00AAAAAA    AAAAAAAA
40000340:    00000000    AAAAAAAA    000A000A    EAEAEAEA
40000350:    EAEAEAEA    EAEAEAEA    EAEAEAEA    EAEAEAEA
40000360:    00000000    00000000    00000000    00000000
40000370:    00000000    00002400    EAEAEAEA    EAEAEAEA
40000380:    EAEAEAEA    EAEAEAEA    EAEAEAEA    EAEAEAEA
40000390:    EAEAEAEA    EAEAEAEA    EAEAEAEA    EAEAEAEA
400003A0:    EAEAEAEA    EAEAEAEA    EAEAEAEA    EAEAEAEA
400003B0:    EAEAEAEA    EAEAEAEA    EAEAEAEA    EAEAEAEA
400003C0:    EAEAEAEA    EAEAEAEA    EAEAEAEA    EAEAEAEA
400003D0:    EAEAEAEA    EAEAEAEA    EAEAEAEA    EAEAEAEA
400003E0:    EAEAEAEA    EAEAEAEA    EAEAEAEA    EAEAEAEA
400003F0:    EAEAEAEA    00000001    EAEAEAEA    EAEAEAEA
OTP Flash RTL8710AF:
# ATFO=0,64
Код:
00000000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
00000020 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 32 85 01 45 4c 55
Как уже писал, первый код для программатора от Rebane не конфигурирует SPIC.
Процедура конфигурации есть в ROM-BIOS. Включение клоков и CS - стандартное.
В DAPLinkDevBoard Ameba SPIC дополнительно присутствуют команды:
REG REG_SPIC_SSIENR (0x40006008) = 0;
REG REG_SPIC_WRITE_QUAD_ADDR_DATA (0x40006104) = BIT_WR_QUAD_II_CMD(0x38);
REG REG_SPIC_READ_QUAD_ADDR_DATA (0x400060F0) = BIT_CTRL_RD_QUAD_IO_CMD(0xEB);
REG REG_SPIC_VALID_CMD (0x40006120) |= 0xFFFFFE01; // ~(BIT_RD_DUAL_I | BIT_RD_DUAL_IO | BIT_RD_QUAD_O | BIT_RD_QUAD_IO | BIT_WR_DUAL_I | BIT_WR_DUAL_II | BIT_WR_QUAD_I | BIT_WR_QUAD_II)


Далее там идет работа со SPIC через SWD. Коды = полная копия имеющегося на сегодня устаревшего исходника в файле hal_spi_flash_ram.c (лежит на гит, но в проект SDK не транслируется - используется бинарная либа)
С данным Spic у нас беда - не нашел подробного описания регистров или аналогов. Это вроде единственный (не включая специфические конфигурационные регистры SoC) контроллер, не имеющий подробного отдельного даташита (PDF)
 
Последнее редактирование:

sharikov

Active member
flash_burst_read(flash_t *obj, uint32_t address, uint32_t Length, uint8_t * data) при невыровенном address выдает неправильный последний байт. При выровненном адресе читает правильно. Где-то там баг.
flash_stream_read читает правильно независимо от выравнивания.
 

pvvx

Активный участник сообщества
flash_burst_read(flash_t *obj, uint32_t address, uint32_t Length, uint8_t * data) при невыровенном address выдает неправильный последний байт. При выровненном адресе читает правильно. Где-то там баг.
flash_stream_read читает правильно независимо от выравнивания.
Это не баг вроде. Такое происходит, если у чипа Flash стартовать по невыровненному адресу. Аналогично даже в Spic ESP. Байты меняются местами очень хитро...
 

sharikov

Active member
Как уже писал, первый код для программатора от Rebane не конфигурирует SPIC.
Код rebane конфигурирует достаточный минимум чтобы работало в однобитном режиме. И оно работает. Для флэшера навороты ни к чему, там нужен простой и понятный код. Скорость ограничивает стирание и заливка по swd. Обмен с флэшкой даже в однобитном режиме на порядок быстрее по сравнению со скоростью swd, т.е ускорять его не имеет практического смысла.
 

pvvx

Активный участник сообщества
Код rebane конфигурирует достаточный минимум чтобы работало в однобитном режиме. И оно работает. Для флэшера навороты ни к чему, там нужен простой и понятный код. Скорость ограничивает стирание и заливка по swd. Обмен с флэшкой даже в однобитном режиме на порядок быстрее по сравнению со скоростью swd, т.е ускорять его не имеет практического смысла.
Он снят с кусков загрузчика и имеет беды с записью. Так-же не годится для CMSIS DAP Link -ов - в них для ARM другая концепция и алгоритм. + Не поддерживает заявленные для RTL чипы Flash именно по работе с регистрами Spic. Только время с им потерял встраивая в программаторы...
Т.е. он никуда не годиться. :) Надо было сразу самому писать совместимый хоть с чем-то. Теперь опять надо время на это тратить - Делаю тут помалеху к CMSIS DAP Link -у флешер...
 
Последнее редактирование:

sharikov

Active member
Такое происходит, если у чипа Flash стартовать по невыровненному адресу.
Читаю за вас даташиты. Дорого.
MX25L8006E:
Read Data Bytes (READ)
The read instruction is for reading data out. The address is latched on rising edge of SCLK, and data shifts out on
the falling edge of SCLK at a maximum frequency fR. The first address byte can be at any location. The address
is automatically increased to the next higher address after each byte data is shifted out, so the whole memory can
be read out at a single READ instruction. The address counter rolls over to 0 when the highest address has been
reached.


Для всех команд чтения аналогично - читать можно с любой позиции.

Неправильно читается последний байт.
 

pvvx

Активный участник сообщества
Неправильно читается последний байт.
Именно - подумаете и поймете почему :) Flash к данному делу не относиться.
Ещё не глядел - есть ли у данного Spic оптимизация для блочного специального чтения с SPI flash (?)...
Беды с записью давно исправлены, снимитесь с ручника.
Угу - накрученными обходными маневрами в сотни лишних кругов :) Там главное в том, что теперь весь буржуйский опен-софт будет с ним мучаться. :p Только это в нем меня радует :p

Какую область охватывает отображение на карту памяти с flash?
 
Последнее редактирование:

pvvx

Активный участник сообщества
# ATFD=0,16
00000000 99 99 96 96 3f cc 66 fc c0 33 cc 03 e5 dc 31 62
#ATFD=100000,16
00100000 99 99 96 96 3f cc 66 fc c0 33 cc 03 e5 dc 31 62
# ATFD=200000,16
00200000 99 99 96 96 3f cc 66 fc c0 33 cc 03 e5 dc 31 62
# ATFD=400000,16
00400000 99 99 96 96 3f cc 66 fc c0 33 cc 03 e5 dc 31 62
# ATFD=800000,16
00800000 99 99 96 96 3f cc 66 fc c0 33 cc 03 e5 dc 31 62
# ATFD=1000000,16
01000000 99 99 96 96 3f cc 66 fc c0 33 cc 03 e5 dc 31 62
# ATFD=2000000,16
02000000 99 99 96 96 3f cc 66 fc c0 33 cc 03 e5 dc 31 62
# ATFD=4000000,16
04000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Ку.
# ATFD=8000000,16
RTL8195A[HAL]: Hard Fault Error!!!!
Три раза ку :)

# ATFD=3fffff0,32
03FFFFF0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

0x4000000/1024/1024 = 64MБ ?
Снимок1269.gif

Или в api функциях режется? Но от куда тогда обрыв? Старший бит заезжает в какой управляющий бит? ...
Походу 0x98000000..0x9C00000 - это первая flash.
Далее 0x9C00000..0xA0000000 - это вторая?
# ATSD=0x9FFFFFF0,32
9FFFFFF0: 00000000 00000000 00000000 00000000
RTL8195A[HAL]: Hard Fault Error!!!!
Т.е. 0x9C00000..0xA0000000 - полностью заполнено нулями. Хто там должен жить?
 
Последнее редактирование:

sharikov

Active member
# ATFD=8000000,16
RTL8195A[HAL]: Hard Fault Error!!!!
Это 0x98000000 + 0x8000000 = 0xA0000000
Пространство не замаплено, поэтому возникает Hard fault. openocd тоже не читает:
> mdw 0xa0000000 1
Failed to read memory at 0xa0000004


# ATFD=3fffff0,32
03FFFFF0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

0x4000000/1024/1024 = 64MБ ?
хз. надо переключать spic pinmux на внешние пины и смотреть логическим анализатором что он передает в адресе флэшки. Если 4-х байтные адреса поддерживает то может и 64м.
 

pvvx

Активный участник сообщества
Это 0x98000000 + 0x8000000 = 0xA0000000
Пространство не замаплено, поэтому возникает Hard fault. openocd тоже не читает:
> mdw 0xa0000000 1
Failed to read memory at 0xa0000004



хз. надо переключать spic pinmux на внешние пины и смотреть логическим анализатором что он передает в адресе флэшки. Если 4-х байтные адреса поддерживает то может и 64м.
Первый раздел в 64МБ флеша дублируется. Далее 64МБ нулей. Возможно что-то-там читается, но выводы дают нуль.
Вроде все 92 (но вроде их там ещё больше :)) GPIO входа-выхода у чипа имеют управляемые подтяжки - можно подергать за них любым входом на чипе - я так прилепил недостающие 2 провода прерываний от контактов "SD вставлена" и "защиты записи" к SDIOH. :)
Подтяжками к нулю или к "1" переключаются... можно транслировать с другого пина...
 

pvvx

Активный участник сообщества
0x4000000_CLK_Flash.gif
CLK Flash при чтении области второго банка 64МБ (0x9C00000..0xA0000000) на RTL8711AM. Тоже читается нулями - наверно CS нет или чего другого...
Выходит окошко для flash в 128МБ. Но что-то со второй частью...
 
Последнее редактирование:

pvvx

Активный участник сообщества
Читаю за вас даташиты. Дорого.
Кручу бесплатно:
У нас 32-х битный регистр (или 16-ти). Задвигаются биты со старшего к младшим. Переключение адреса по чету сбрасывает регистр (т.е. выбирает следующий адрес или регистр - оно-же spic - в памяти отображаться должно, да по адресам).
Начали читать с нечетного... получили к примеру 3 старших байта - записали.
Далее всё хорошо - по прет по четыре. Теперь пятый - последний.
Залез он в старшие 8 бит и сидит там. Вы его ищите в младших битах, как положено (только кем?)
Вот он вам и последний неверный :p Так што курить даташит на flash - не при делах.
 
Последнее редактирование:
Сверху Снизу