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

SDIO Host RTL8710

pvvx

Активный участник сообщества
В RTL871x имеется отдельный полнофункциональный контроллер SDIO Host.
Полное, 100%, описание можно взять тут: Simplified_SD_Host_Controller_Spec
(Не путать интерфейс SDIOH с SDIOD. SDIOD - это другая часть чипа с SDIO Device и примеры к нему лежат в project\realtek_ameba1_va0_example\example_sources\sdio_device\src\main.c ...)
Обычно SDIOH примененяют для подключения SD катрочек:

RtlDuino
На модуле RTL00 не хватает входов PA_6 и PA_7 для примеа сигналов с контактов "Смены носителя" и "Зашиты записи". Но это решается в моих вариантах библиотек.
Так-же на RTL00 вывод VDIO_SDIO соединен с VCC 3.3V во внутреннем слое платы и не позволяет переключений интерфейса на 1.8V. Для этого необходим модуль с другой разводкой.
RTL00V1.0.VDIO_SDIO.gif
В SDK 3.4a API и Hal SDIOH не дописан и имеет ошибки. Не понимает многие SD карты, да и вообще не работает. По этому берем более свежую версию из RtlDuino.
Код:
[SDIO Inf]SDIO Init Host Begin...
[SDIO Inf]Supply SD bus voltage: 3.3V
[SDIO Inf]SDIO Host init Success.
[SDIO Inf]init sd card.
[SDIO Inf]This is a SDHC card
[SDIO Inf]SD card does not support high speed.

SD Init: 0
[SDIO Inf]sdio_get_sdcard_status.

SD Status: 4 - 0 - 3

SD CSD:
[Addr]   .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F
1FFFF340: 40 0e 00 32 5b 59 00 00 f1 dd 7f 80 0a 40 00 01     @..2[Y.......@..

SD Capacity: 63404032 sectors (30 GB | 30959 MB | 31702016 KB)
На сегодня всё с SDIOH на RTL00 работает. Уровень API и HAL исправлен.
В классе SdFatFs добавлены:
Код:
    void WP_Off();
    void WP_On();
    void InsertSD();
    void RemoveSD();
Которые можно вызывать ретранслируя события с контактов "Смены носителя" и "Зашиты записи" включенных к другим пинам модуля.

Максимальный CLK для SD в текущих либах 41.6MHz, т.е. контролер обслуживает поток с SD до 20 Мегабайт в секунду по ADMA.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Всё - в Arduino сделал - всё пашет с SD. Проверю на скорости чтения/записи FAT и скоро скину в RtlDuino... :)
Пример с list_root_files.ino:
Код:
[SDIO Inf]SDIO Init Host Begin...
[SDIO Inf]Supply SD bus voltage: 3.3V
SD card insert
[SDIO Inf]SDIO Host init Success.
[SDIO Inf]init sd card.
[SDIO Inf]This is a SDHC card
Files under "0:/":
arm128_start.elf
arm192_start.elf
arm224_start.elf
bootcode.bin
cmdline.txt
config.txt
kernel.img
kernel_cutdown.img
kernel_emergency.img
loader.bin
start.elf
issue.txt

CLK CPU         166666666 Hz
RAM heap        380296 bytes
TCM heap        64768 bytes
 
Последнее редактирование:

pvvx

Активный участник сообщества
Скорость чтения файлов в FAT c карты SDHC (4Gb) в Arduino (тип неизвестен - шла с 'малинкой') CSD: 400e00325b5900001d9b7f800a400001
(Кому интересно - расшифровка CSD тут SDHC CSD Decoder)
Код:
Test read file buf 512 bytes:
SD card insert
Dir '\*.*':
arm128_start.elf                       2012/07/15 18:10:00     2051056 bytes           2490 ms                 823 KB/s
arm192_start.elf                       2012/07/15 18:10:00     2051056 bytes           2267 ms                 904 KB/s
arm224_start.elf                       2012/07/15 18:10:00     2051056 bytes           2613 ms                 784 KB/s
bootcode.bin                           2012/07/15 18:10:00     16536 bytes             20 ms                   826 KB/s
cmdline.txt                            2012/07/15 20:06:00     142 bytes               0 ms                    142 KB/s
config.txt                             2012/07/15 20:06:00     1180 bytes              1 ms                    1180 KB/s
kernel.img                             2012/07/15 18:10:00     6263772 bytes           8174 ms                 766 KB/s
kernel_cutdown.img                     2012/07/15 18:10:00     4189540 bytes           5279 ms                 793 KB/s
kernel_emergency.img                   2012/07/15 18:10:00     16321844 bytes          20361 ms                801 KB/s
loader.bin                             2012/07/15 18:10:00     275235 bytes            430 ms                  640 KB/s
start.elf                              2012/07/15 18:10:00     2051056 bytes           2413 ms                 850 KB/s
issue.txt                              2012/07/15 20:44:00     137 bytes               1 ms                    137 KB/s

Test end.
SD card removed

Test read file buf 1024 bytes:
SD card insert
Dir '\*.*':
arm128_start.elf                       2012/07/15 18:10:00     2051056 bytes           1678 ms                 1222 KB/s
arm192_start.elf                       2012/07/15 18:10:00     2051056 bytes           1921 ms                 1067 KB/s
arm224_start.elf                       2012/07/15 18:10:00     2051056 bytes           2018 ms                 1016 KB/s
bootcode.bin                           2012/07/15 18:10:00     16536 bytes             16 ms                   1033 KB/s
cmdline.txt                            2012/07/15 20:06:00     142 bytes               1 ms                    142 KB/s
config.txt                             2012/07/15 20:06:00     1180 bytes              3 ms                    393 KB/s
kernel.img                             2012/07/15 18:10:00     6263772 bytes           6324 ms                 990 KB/s
kernel_cutdown.img                     2012/07/15 18:10:00     4189540 bytes           4248 ms                 986 KB/s
kernel_emergency.img                   2012/07/15 18:10:00     16321844 bytes          16306 ms                1000 KB/s
loader.bin                             2012/07/15 18:10:00     275235 bytes            304 ms                  905 KB/s
start.elf                              2012/07/15 18:10:00     2051056 bytes           2049 ms                 1001 KB/s
issue.txt                              2012/07/15 20:44:00     137 bytes               1 ms                    137 KB/s

Test end.
SD card removed

Test read file buf 2048 bytes:
SD card insert
Dir '\*.*':
arm128_start.elf                       2012/07/15 18:10:00     2051056 bytes           889 ms                  2307 KB/s
arm192_start.elf                       2012/07/15 18:10:00     2051056 bytes           1063 ms                 1929 KB/s
arm224_start.elf                       2012/07/15 18:10:00     2051056 bytes           1101 ms                 1862 KB/s
bootcode.bin                           2012/07/15 18:10:00     16536 bytes             9 ms                    1837 KB/s
cmdline.txt                            2012/07/15 20:06:00     142 bytes               0 ms                    142 KB/s
config.txt                             2012/07/15 20:06:00     1180 bytes              3 ms                    393 KB/s
kernel.img                             2012/07/15 18:10:00     6263772 bytes           3456 ms                 1812 KB/s
kernel_cutdown.img                     2012/07/15 18:10:00     4189540 bytes           2291 ms                 1828 KB/s
kernel_emergency.img                   2012/07/15 18:10:00     16321844 bytes          8860 ms                 1842 KB/s
loader.bin                             2012/07/15 18:10:00     275235 bytes            163 ms                  1688 KB/s
start.elf                              2012/07/15 18:10:00     2051056 bytes           1116 ms                 1837 KB/s
issue.txt                              2012/07/15 20:44:00     137 bytes               1 ms                    137 KB/s

Test end.
SD card removed

Test read file buf 4096 bytes:
SD card insert
Dir '\*.*':
arm128_start.elf                       2012/07/15 18:10:00     2051056 bytes           504 ms                  4069 KB/s
arm192_start.elf                       2012/07/15 18:10:00     2051056 bytes           629 ms                  3260 KB/s
arm224_start.elf                       2012/07/15 18:10:00     2051056 bytes           654 ms                  3136 KB/s
bootcode.bin                           2012/07/15 18:10:00     16536 bytes             6 ms                    2756 KB/s
cmdline.txt                            2012/07/15 20:06:00     142 bytes               1 ms                    142 KB/s
config.txt                             2012/07/15 20:06:00     1180 bytes              3 ms                    393 KB/s
kernel.img                             2012/07/15 18:10:00     6263772 bytes           2041 ms                 3068 KB/s
kernel_cutdown.img                     2012/07/15 18:10:00     4189540 bytes           1358 ms                 3085 KB/s
kernel_emergency.img                   2012/07/15 18:10:00     16321844 bytes          5218 ms                 3127 KB/s
loader.bin                             2012/07/15 18:10:00     275235 bytes            99 ms                   2780 KB/s
start.elf                              2012/07/15 18:10:00     2051056 bytes           650 ms                  3155 KB/s
issue.txt                              2012/07/15 20:44:00     137 bytes               1 ms                    137 KB/s

Test end.
SD card removed

Test read file buf 8192 bytes:
SD card insert
Dir '\*.*':
arm128_start.elf                       2012/07/15 18:10:00     2051056 bytes           327 ms                  6272 KB/s
arm192_start.elf                       2012/07/15 18:10:00     2051056 bytes           419 ms                  4895 KB/s
arm224_start.elf                       2012/07/15 18:10:00     2051056 bytes           433 ms                  4736 KB/s
bootcode.bin                           2012/07/15 18:10:00     16536 bytes             5 ms                    3307 KB/s
cmdline.txt                            2012/07/15 20:06:00     142 bytes               1 ms                    142 KB/s
config.txt                             2012/07/15 20:06:00     1180 bytes              2 ms                    590 KB/s
kernel.img                             2012/07/15 18:10:00     6263772 bytes           1336 ms                 4688 KB/s
kernel_cutdown.img                     2012/07/15 18:10:00     4189540 bytes           900 ms                  4655 KB/s
kernel_emergency.img                   2012/07/15 18:10:00     16321844 bytes          3452 ms                 4728 KB/s
loader.bin                             2012/07/15 18:10:00     275235 bytes            64 ms                   4300 KB/s
start.elf                              2012/07/15 18:10:00     2051056 bytes           428 ms                  4792 KB/s
issue.txt                              2012/07/15 20:44:00     137 bytes               1 ms                    137 KB/s

Test end.
SD card removed

Test read file buf 16384 bytes: (удалено, т.к. не лезет в сообщение, скорость примерно одинакова с 8k и 32k)

Test read file buf 32768 bytes:
SD card insert
Dir '\*.*':
arm128_start.elf                       2012/07/15 18:10:00     2051056 bytes           328 ms                  6253 KB/s
arm192_start.elf                       2012/07/15 18:10:00     2051056 bytes           420 ms                  4883 KB/s
arm224_start.elf                       2012/07/15 18:10:00     2051056 bytes           430 ms                  4769 KB/s
bootcode.bin                           2012/07/15 18:10:00     16536 bytes             5 ms                    3307 KB/s
cmdline.txt                            2012/07/15 20:06:00     142 bytes               1 ms                    142 KB/s
config.txt                             2012/07/15 20:06:00     1180 bytes              3 ms                    393 KB/s
kernel.img                             2012/07/15 18:10:00     6263772 bytes           1342 ms                 4667 KB/s
kernel_cutdown.img                     2012/07/15 18:10:00     4189540 bytes           896 ms                  4675 KB/s
kernel_emergency.img                   2012/07/15 18:10:00     16321844 bytes          3457 ms                 4721 KB/s
loader.bin                             2012/07/15 18:10:00     275235 bytes            64 ms                   4300 KB/s
start.elf                              2012/07/15 18:10:00     2051056 bytes           433 ms                  4736 KB/s
issue.txt                              2012/07/15 20:44:00     137 bytes               1 ms                    137 KB/s

Test end.
SD card removed
Т.е. стремится за 4 мегабайта в сек при буфере от 8 килобайт.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Другая SD (32Gb) с авто-регистратора (сегментирована на 100% - работала без формата много лет :) ), CSD: 400e00325b590000f1dd7f800a400001 (Class 10)
CLK на SD идет 41.6MHz, как и у предыдущей (это максимум, что ставитcя в Adruino, если не патчить). Т.е. теор. предел трансфера на 4-х битном интерфейсе SDIO должен быть до 20MB/sec, не учитывая чтения FAT.
Читаем файл в директории \DCIM\100MEDIA\AMBA1841.MOV, 914 229 924 bytes (~1Gb):
Буфер 32768 bytes: время чтения 66326 ms, 13783 K/s
Буфер 16384 bytes: время чтения 86754 ms, 10538 K/s
Буфер 8192 bytes: время чтения 130562 ms, 7002 K/s
Буфер 4096 bytes: время чтения 190748 ms, 4792 K/s
Буфер 2048 bytes: время чтения 330973 ms, 2762 K/s
Буфер 1024 bytes: время чтения 622046 ms, 1469 K/s
Далее, для приемного буфера в 512 байт устал ждать... :)
Не spiffs однако - у него до 1 K/сек при много файлов и фрагментации...
 
Последнее редактирование:

pvvx

Активный участник сообщества
Есть ещё утечка памяти у класса SdFatFs для Arduino. Что-то там кривое вписали в Ameba... Для домашних пользователей дурино это не сказывается, но если создавать/уничтожать монтировать/размонтировать диски, то каждый раз отжирает heap...
А я хочу грузить оверлеи c 32 Гега SD :)
 

pvvx

Активный участник сообщества
Реверс "исходинков" для SDIOH и SD почти сделан и исправлены ошибки от Ameba... Пока сидят тут:
RTL00MP3/RTL00_SDKV35a/component/common/drivers/sdio/realtek/sdio_host/src at master · pvvx/RTL00MP3 · GitHub
RTL00MP3/hal_sdio_host.c at master · pvvx/RTL00MP3 · GitHub
Нет rtl8195a_sdio_device.c, но он сильно не требуется, т.к. заголовки к нему есть и не сложно прилинковать как rtl8195a_sdio_device.o или закинуть его в какую либу: RTL00MP3/lib_sdcard.a at master · pvvx/RTL00MP3 · GitHub
 

sharikov

Active member
Похоже ADMA2 SDIOHC не может работать с областью TCM.
Операция успешно выполняется но данные в буфере приемнике не появляются. Если буфер в SRAM все работает. Возможно то же относится к дескрипторам ADMA2.
Это проблема потому что в амебовскоой реализации HalSdioHostChangeSdClockRtl8195a используется временный буфер на стеке а стек Freertos размещает в TCM.
 

pvvx

Активный участник сообщества
Похоже ADMA2 SDIOHC не может работать с областью TCM.
Вроде - да.
Это проблема потому что в амебовскоой реализации HalSdioHostChangeSdClockRtl8195a используется временный буфер на стеке а стек Freertos размещает в TCM.
Назначьте область стека сами при пуске данной задачи.
 
Сверху Снизу