• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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.
Назначьте область стека сами при пуске данной задачи.
 
Сверху Снизу