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

MJIOT-AMB-03-DEBUG (RTL8710BN)

pvvx

Активный участник сообщества
Пришли платки MJIOT-AMB-03-DEBUG (RTL8710BN).
RTL8710BN_DEBUG.jpg
На них установлены модули:
RTL8710BN.jpg
(видно, что после пайки всё помыто плохо, т.е. вообще не мыто от флюса, хотя каждую фигную присылают в отдельном пакетике :) )
На момент описания цена на модули составляет от $2.0+ -> ebay - 178 руб
UM0114 Realtek Ameba-Z Data Sheet20170214.pdf

В сети есть и описание от AD -> Схемотехника модуля MJIOT-AMB-03

При включении или нажатии кнопки RST, в USB-UART на 115200, выводится:
Код:
ROM:[V0.1]
FLASHRATE:4
BOOT TYPE:0 XTAL:40000000
IMG1 DATA[-1:ffffffff]
Flash not Program
Если нажата и удержана кнопка FLASH и коротко RST, в USB-UART на 115200, выводится:
Код:
<RTL8195A>
ROM:[V0.1]

FLASHRATE:4
UARTIMG_Download 2

Open xModem Transfer on Log UART...
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
т.е. есть встроенная в ROM загрузка новой прошивки по UART.
Программы загрузки ПО по UART ( ImageTool) в сети нет.
При покупке модулей требуйте её от продавца, он указывает её в своих рекламах! Или требуйте возврата денег (открывайте спор о том, что товар не соответствует заявлениям). :)

Подключил Jtag/SWD: PA14->SWD_CLK, PA15->SWD_DATA.
Считал ROM в Jlink -> savebin bios-rom.bin 0x00000000 0x080000
2МБ Flash в модуле пустая -> savebin ff.bin 0x08000000 0x00200000
Запустил IAR, собрал стандартный проект AT из SDK с включенным CONFIG_WEBSERVER и увеличенным Heap для RTOS на 156 КБ.
Всё запустилось и работает…
Код:
ROM:[V0.1]
FLASHRATE:4
BOOT TYPE:0 XTAL:40000000
IMG1 DATA[1112:10002000]
IMG1 ENTRY[800043b:100021dd]
IMG1 ENTER
CHIPID[000000ff]
read_mode idx:0, flash_speed idx:0
calibration_result:[1:3:13][b:d]
calibration_result:[2:13:7][1:d]
calibration_result:[3:3:3][1:3]
calibration_ok:[2:13:7]
FLASH CALIB[NEW OK]
OTA2 ADDR[ffffffff]
OTAx SELE[ffffffff]
OTA1 USE
IMG2 DATA[0x8052d58:4912:0x10005000]
IMG2 SIGN[RTKWin(10005008)]
IMG2 ENTRY[0x10005000:0x80506bb]
===== Enter Image 2 ====
System_Init1
OSC8M: 7fdd39
boot reason: 0
System_Init2
#interface 0 is initialized
interface 1 is initialized

Initializing WIFI ...
LDO Mode, BD_Info: 0
LDO Mode, BD_Info: 0
Start LOG SERVICE MODE
WIFI initialized
init_thread(53), Available heap 0x1c2e8
#AT
unknown command 'AT'
[MEM] After do cmd, available heap 119272
# ATWE
[ATWE]: _AT_WLAN_START_WEB_SERVER_
WEB:Enter start web server!
[MEM] After do cmd, available heap 117032
#
LoadWifiConfig(): Read from FLASH!
LoadWifiConfig(): local_config.boot_mode=0x77665502
LoadWifiConfig(): local_config.ssid=RTL8710
LoadWifiConfig(): local_config.channel=1
LoadWifiConfig(): local_config.security_type=1
LoadWifiConfig(): local_config.password=0123456789
LwIP_DHCP: dhcp stop.
Deinitializing WIFI ...
LDO Mode, BD_Info: 0
WIFI deinitialized
Initializing WIFI ...
LDO Mode, BD_Info: 0
LDO Mode, BD_Info: 0
WIFI initialized
RTL8195A[Driver]: +OnAuth: 00:0f:54:10:6a:b5
RTL8195A[Driver]: +OnAssocReq
RTL8195A[Driver]: ap mode 4-1
RTL8195A[Driver]: ap mode 4-2
RTL8195A[Driver]: ap mode 4-3
RTL8195A[Driver]: ap mode 4-4
RTL8195A[Driver]: set pairwise key to hw: alg:4(WEP40-1 WEP104-5 TKIP-2 AES-4) for 0:f:54:10:6a:b5
RTL8195A[Driver]: set group key to hw: alg:4(WEP40-1 WEP104-5 TKIP-2 AES-4) keyid:1
[29560]DHCP assign ip = 192.168.1.100
AT_WEB.gif
Пинги 1 ms, что на Station, что AP модуля.
При включенной AP с соединенным клиентом пишет available heap 110680
При включенной AP+ST с соединенным клиентами пишет available heap 90576

Тест скорости TCP в AT по команде ATWT=-s на ST:
Код:
iperf.exe -c 192.168.1.72 -i 1 -t 10 -w 256k -p 5001
------------------------------------------------------------
Client connecting to 192.168.1.72, TCP port 5001
TCP window size:  256 KByte
------------------------------------------------------------
[168] local 192.168.1.2 port 11963 connected with 192.168.1.72 port 5001
[ ID] Interval       Transfer     Bandwidth
[168]  0.0- 1.0 sec  1.55 MBytes  13.0 Mbits/sec
[168]  1.0- 2.0 sec  1.27 MBytes  10.7 Mbits/sec
[168]  2.0- 3.0 sec  1.27 MBytes  10.7 Mbits/sec
[168]  3.0- 4.0 sec  1.30 MBytes  10.9 Mbits/sec
[168]  4.0- 5.0 sec  1.19 MBytes  9.96 Mbits/sec
[168]  5.0- 6.0 sec  1.30 MBytes  10.9 Mbits/sec
[168]  6.0- 7.0 sec  1.29 MBytes  10.8 Mbits/sec
[168]  7.0- 8.0 sec  1.28 MBytes  10.7 Mbits/sec
[168]  8.0- 9.0 sec  1.30 MBytes  10.9 Mbits/sec
[168]  9.0-10.0 sec  1.25 MBytes  10.5 Mbits/sec
[168]  0.0-10.2 sec  13.0 MBytes  10.7 Mbits/sec
Включил SSL клиента (ATWL) и установил SSL_MAX_CONTENT_LEN = 16384 (предельный-максимальный :) ):
Код:
# ATWL=google.ru
[ATWL]: _AT_WLAN_SSL_CLIENT_
[MEM] After do cmd, available heap 113632
  . Connecting to tcp/google.ru/443... ok
  . Setting up the SSL/TLS structure... ok
  . Performing the SSL/TLS handshake... ok
  . Use ciphersuite TLS-RSA-WITH-AES-128-CBC-SHA
  > Write to server: 18 bytes written
GET / HTTP/1.0
  < Read from server: 511 bytes read
HTTP/1.0 302 Found
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Referrer-Policy: no-referrer
Location: https://www.google.ru/?gfe_rd=cr&ei=rPBzWf7tOLDG7gT5z6iABw
Content-Length: 259
Date: Sun, 23 Jul 2017 00:41:16 GMT
Alt-Svc: quic=":443"; ma=2592000; v="39,38,37,36,35"
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="https://www.google.ru/?gfe_rd=cr&amp;ei=rPBzW
 46 bytes read
f7tOLDG7gT5z6iABw">here</A>.
</BODY></HTML>
EOF
Min available heap size = 48384 bytes during ssl_client
В итоге прошивка AT с WEB и SSL (image2_all_ota1.bin) вышла в 319668 байт.
PS: ESP8266 до этого всего далеко, а можно и ужать SDK, как в серии "A" ещё к сотне кило, да почистить RAM...

Дополнения:
Тест на требуемую энергию для соединения модуля RTL8710BN с внешней AP в SDK 4.0b.
 

Вложения

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

pvvx

Активный участник сообщества
Среднее потребление (29.8 mA) за 400 сек в режиме Station + команда ATSL=r,0 платы MJIOT-AMB-03-DEBUG (с CH430 и LM1117) по 5В (USB включено):
AT_ST_PWR.gif
При нажатой кнопке RST среднее потребление 14.72 mA (среднее за 60 сек и нагреве платы от руки, спека на CH430 гласит 12 mA, LM1117 - 5 mA).
Итоговое 29.8-14.7 = 15.1 мА.

Данные потребления самого модуля RTL8710BN при разных включенных опциях описаны в приложенных документах к SDK и рассматривать нет смысла...

Приложен лог (csv) с 24-х синхронного (I/U) измерителя c аппаратными усреднениями и фильтрации точки в 0.1 сек, по которому построен график (абсолют к 1%, при шкале в 1A более 6 знаков..):
 

Вложения

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

12345

New member
How much does it take just for SSL conection? The only drawback in this series is that it has just few pins avaliable a and a bad pin mux assigment!
 

pvvx

Активный участник сообщества
How much does it take just for SSL conection?
Working ADC, many sleep modes + PMU + low power, FPU, hard I2C, Security Engine, DMA, more RAM, Flash XIP > 16 MB, advanced BOOT-ROM (all HAL + API), WiFi HT40, WiFi alliance certificate, ... At the current price of $2.0. (По цене данный младший чип из семейства RTL871x "B" надо сравнивать с ESP-32S, но ESP-32S хуже по питанию и не годиться для автономных IoT).
The only drawback in this series is that it has just few pins avaliable a and a bad pin mux assigment!
Up to 17 GPIO... Not for curved handles and Arduino fans :p
 
Последнее редактирование:

goodwin

Member
Весьма неплохо для исполнения кода из flash.
Плохо, что быстро заливать отладчиком в RAM сейчас не получится :)
Сколько времени заливаются 319668 байт?
 

pvvx

Активный участник сообщества
Весьма неплохо для исполнения кода из flash.
Используется очень много кода из ROM. Там весь API и HAL и рабочие...
Плохо, что быстро заливать отладчиком в RAM сейчас не получится :)
Ну Flash то внешняя и её не жалко. 10 тысяч записей ей под силу без остаточных проблем...
Сколько времени заливаются 319668 байт?
Через SWD на огрызке STM32F103 при его максимуме в 4..6 МГц или на SEGGER при SWD > 12MHz? :) Безусловно упирается в производительность Flash. Это в среднем к 100..200 КБ/сек...
По UART, через ROM загрузчик ещё нет внешней программы. Там 1500000 Baud Xmodem (если прописать eFuse, то можно переключить на 38400 Baud). Реверс ROM показал что там более пяти команд типа чтения/записи/стирания сектора и т.д. Кроме загрузки по UART, есть загрузка по SPI и USB (USB для старшего чипа серии), ну и SDIO... UART программирование не копал, т.к. есть тема RTL871xBx Tools (Ameba Z)
Код:
; =============== S U B R O U T I N E =======================================

HalResetVsr                           

var_11         = -0x11
var_10         = -0x10

                PUSH            {R4-R6,LR}
                LDR            R3, =__rom_bss_end__
                LDR            R5, =NewVectorTable
                LDR            R2, =(SYSCFG2_ROMINFO_Set+1)
                LDR            R4, =_start_boot_loader_ram
                SUB            SP, SP, #8
                SUBS            R5, R3, R5
                BLX            R2 ; SYSCFG2_ROMINFO_Set
                MOVS            R0, #0
                LDR            R3, =(RCC_PeriphClockCmd+1)
                MOVS            R2, #1
                MOVS            R1, #0x40 ; '@'
                BLX            R3 ; RCC_PeriphClockCmd
                LDR            R3, =REG_SOC_FUNC_EN
                LDR            R3, [R3]
                LSLS            R0, R3, #2 ; BIT_SYS_PWRON_TRAP_SHTDN_N ?
                BMI.W          loc_5784

loc_565C
                LDR            R3, =(_memset+1)
                LDR            R0, =NewVectorTable
                MOV            R2, R5
                MOVS            R1, #0
                BLX            R3 ; _memset
                LDR            R3, =REG_SOC_FUNC_EN
                LDR            R3, [R3]
                CMP            R3, #0
                BLT.W          loc_577E

loc_5670
                LDR            R3, =REG_SOC_FUNC_EN
                LDR            R3, [R3]
                LSLS            R1, R3, #4
                BMI            loc_5778

loc_5678
                MOVS            R0, #0
                LDR            R3, =(CPU_ClkSet+1)
                LDR            R5, =ConfigDebugErr
                BLX            R3 ; CPU_ClkSet
                LDR            R1, =ConfigDebugWarn
                LDR            R0, =ConfigDebugInfo
                LDR            R2, =REG_SYS_EFUSE_SYSCFG6
                MOVS            R3, #0
                MOV.W          R6, #0xFFFFFFFF
                STR            R3, [R1]
                STR            R6, [R5]
                STR            R3, [R0]
                LDR            R2, [R2]
                LDR            R0, =unk_1003EFFC
                LDR            R6, =(NCO32K_Init+1)
                LSLS            R2, R2, #0x10
                IT MI
                STRMI          R3, [R5]
                LDR            R3, =(VECTOR_TableInit+1)
                BLX            R3 ; VECTOR_TableInit
                MOVS            R0, #1
                LDR            R3, =(OSC32K_Cmd+1)
                BLX            R3 ; OSC32K_Cmd
                LDR            R3, =(XTAL_ClkGet+1)
                BLX            R3 ; XTAL_ClkGet
                MOVS            R2, #9
                MOV            R1, R0
                MOVS            R3, #2
                MOV.W          R0, #0x8000
                BLX            R6 ; NCO32K_Init
                LDR            R3, =(DIAG_UartInit+1)
                MOVS            R0, #1
                BLX            R3 ; DIAG_UartInit
                MOVS            R0, #0
                BL             BOOT_ROM_ShowBuildInfo
                LDR            R3, =(SYSTIMER_Init+1)
                BLX            R3 ; SYSTIMER_Init
                BL             BOOT_ROM_InitFlash
                BL             BOOT_ROM_Simulation
                LDR            R3, =REG_SOC_FUNC_EN
                LDR            R3, [R3]
                LSLS            R6, R3, #5 ; BIT_SOC_PATCH_FUNC2 ?
                BMI            loc_5772

loc_56D8
                LDR            R3, =(SYSCFG1_TRP_ICFG+1)
                BLX            R3 ; SYSCFG1_TRP_ICFG
                CMP            R0, #2
                BEQ            loc_5748
                MOVS            R0, #0x14
                LDR            R3, =(RtlConsolRom+1)
                BLX            R3 ; RtlConsolRom

loc_56E6
                LDR            R3, =(SYSCFG1_TRP_UARTImage+1)
                BLX            R3 ; SYSCFG1_TRP_UARTImage
                CBNZ            R0, __uart_img_dwnl
                LDR            R3, =(BKUP_Read+1)
                BLX            R3 ; BKUP_Read
                LSLS            R1, R0, #0x1C
                BMI            __uart_img_dwnl
                LDR            R3, =REG_SOC_FUNC_EN
                LDR            R3, [R3]
                LSLS            R2, R3, #3
                BMI            loc_5742

loc_56FC
                ADD            R2, SP, #0x18+var_10
                MOVS            R3, #0
                STRB.W         R3, [R2,#-1]!
                LDR            R3, =REG_SYS_EFUSE_CTRL
                LDR            R4, =(EFUSE_OneByteReadROM+1)
                LDR            R0, [R3]
                MOVS            R1, #0xD3 ; 'L'
                MOVS            R3, #7
                BLX            R4 ; EFUSE_OneByteReadROM
                LDRB.W         R3, [SP,#0x18+var_11]
                LSLS            R3, R3, #0x1F
                BPL            loc_576C

__boot_usb
                LDR            R2, =REG_SOC_HCI_COM_FUNC_EN
                LDR            R3, [R2]
                ORR.W          R3, R3, #0x10000
                STR            R3, [R2]
                BL             BOOT_ROM_InitUsb
                BL             BOOT_ROM_Process

loc_572A                                ; CODE XREF: HalResetVsr:loc_572Aj
                B              loc_572A
; ---------------------------------------------------------------------------

__uart_img_dwnl                        ; CODE XREF: HalResetVsr+B2j
                                        ; HalResetVsr+BAj
                MOVS            R1, #8
                MOVS            R0, #0
                LDR            R3, =(BKUP_Clear+1)
                BLX            R3 ; BKUP_Clear
                LDR            R3, =(UARTIMG_Download+1)
                MOVS            R0, #2
                BLX            R3 ; UARTIMG_Download
                LDR            R3, =REG_SOC_FUNC_EN
                LDR            R3, [R3]
                LSLS            R2, R3, #3
                BPL            loc_56FC

loc_5742                                ; CODE XREF: HalResetVsr+C2j
                LDR            R3, [R4,#8]
                BLX            R3
                B              loc_56FC
; ---------------------------------------------------------------------------
loc_5748
                LDR            R3, =(SYSCFG1_AutoLoadDone+1)
                BLX            R3 ; SYSCFG1_AutoLoadDone
                CMP            R0, #0
                BEQ            loc_56E6
                LDR            R3, =REG_SYS_EFUSE_SYSCFG6
                LDR            R3, [R3]
                CMP            R3, #0
                BGE            loc_56E6
                LDR            R3, [R5]
                LSLS            R0, R3, #1
                BPL            loc_5764
                LDR            R0, =aRomBootDebugMo ; "\rROM BOOT: DEBUG mode \n"
                LDR            R3, =(DiagPrintf+1)
                BLX            R3 ; DiagPrintf

loc_5764
                LDR            R0, =loc_186A0
                LDR            R3, =(RtlConsolRom+1)
                BLX            R3 ; RtlConsolRom
                B              loc_56E6
; ---------------------------------------------------------------------------
loc_576C
                LDR            R3, =(PINMUX_SWD_OFF+1)
                BLX            R3 ; PINMUX_SWD_OFF
                B              __boot_usb
; ---------------------------------------------------------------------------
loc_5772
                LDR            R3, [R4,#(dword_10002010 - 0x10002000)]
                BLX            R3
                B              loc_56D8
; ---------------------------------------------------------------------------
loc_5778
                LDR            R3, [R4,#(dword_1000200C - 0x10002000)]
                BLX            R3
                B              loc_5678
; ---------------------------------------------------------------------------
loc_577E
                LDR            R3, [R4]
                BLX            R3
                B              loc_5670
; ---------------------------------------------------------------------------
loc_5784
                LDR            R3, [R4,#(dword_10002004 - 0x10002000)]
                BLX            R3
                B              loc_565C
; End of function HalResetVsr
PS: Пока более озабочен RTL8195AM, т.к. он мне нужнее по ТТХ и серию "B" развивать пока не намерен... Использую только то, что есть уже готовое от Ameba :)
 
Последнее редактирование:

12345

New member
Well when I look at this pin chart it's states that you can't use i2c with spi and uart2 log!
I asked how much ram did it take just for ssl link? In realtek doc it is stated that it has only 140kB avaliable of ram to use in aplications
 

Вложения

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

pvvx

Активный участник сообщества
Well when I look at this pin chart it's states that you can't use i2c with spi and uart2 log!
Use UART1 for LOG. Or RTL8711BG :)
I asked how much ram did it take just for ssl link? In realtek doc it is stated that it has only 140kB avaliable of ram to use in aplications
Free 140 KB (SDK SSL)? Or all RAM? :)
UM0115 Realtek Ameba-Z Introduction.pdf:
Снимок1550.gif
The flash size is locked at efuse?
Flash size is not locked.
 
Последнее редактирование:

12345

New member
[QUOTE = "pvvx, post: 39182, member: 6"] Use UART1 for LOG. Or RTL8711BG:)
Free 140 KB (SDK SSL)? Or all RAM? :)[/ QUOTE]
It is stated that it has only one uart! :( And it does not mention in what conditions it have 140 of free ram:(
 

pvvx

Активный участник сообщества
Последнее редактирование:

12345

New member
I like rtl chips it's better than esp "xx" in general but this BN series are very limited in I / O and should have a bit more. BN series is nice for arduboys to make shields and connect it to 5V atmegas and use AT command interface not more than this,
 
Последнее редактирование:

pvvx

Активный участник сообщества
I like rtl chips it's better than esp in general but this BN series are very limited in I/O and should have a bit more ram it's ok for price but it's a bit disapoiting. BN series is nice for arduboys to make shields and connect it to 5V atmegas and use AT interface not more than this,
AT interface - :confused: Нафиг такое...
 

12345

New member
[QUOTE = "pvvx, post: 39186, member: 6"] RTL8710BN: 1 Normal UART + 1 Log UART.
BIOS-ROM use 0,1,2 number UART. [/ QUOTE]
In resume: if you use i2c + spi = no uart, uart + i2c = no spi, spi + uart = no i2c in qfn32 BN series also no I2S :(
 

pvvx

Активный участник сообщества
Из примеров не ясно, RTL8710BN имеет два или один BOR?
sdk-ameba-v4.0b_without_NDA_GCC_V1.0.0\project\realtek_amebaz_va0_example\example_sources\bor2
This example describes how to use Bor2 Brown-Out Reset.

Потребление самим модулем при активной Station, после команды "TICKPS r" (в прошивке от SDK из первого сообщения темы):
Снимок1570.gif Снимок1572.gif

Если WiFi отключить и дать команду "TICKPS r", то INA219 с резистром 0.1 Ом измерить потребление не может (менее 0.2 мА):
Снимок1573.gif
Лог при этом:
Код:
#TICKPS r
ReguTimer CalibData:10fa
# ATS?
[ATS?]: _AT_SYSTEM_HELP_
[ATS?]: COMPILE TIME: 23.07.2017- 3:38:21
[ATS?]: SW VERSION: v.3.4.23.07.2017

[MEM] After do cmd, available heap 159168
На ввод любой команды в UART просыпается и жрет 28 мА:
Снимок1575.gif
 
Последнее редактирование:

pvvx

Активный участник сообщества
Замерял питание модуля с примером sdk-ameba-v4.0b_without_NDA_GCC_V1.0.0\project\realtek_amebaz_va0_example\example_sources\adc_wakeup
(This example describes how to use adc one shot mode wakeup.)
Там чип уходит в легкий sleep и просыпается для сбора замеров со своего ADC...
Вышло средних ~0.89 мА:
RTL8710BN_SLP_ADC.gif
Number of values: 2001
Maximum value: ,0141 at position 557
Minimum value: ,0007 at position 158

Range: ,0134

Average: ,00089
Median: ,0007
Mode: ,0007
Std. Deviation: ,0011
Variance: ,00000
Root Mean Square: ,00141
Correlation: ,0128


В питании модуля стоит 470 мкФ... Просыпается на долго, т.к. выводит в UART значения с ADC.
Не ясна ситуация, почему в данном sleep с ADC то 700 мкА, то 800 мкА:
RTL8710BN_SLP_ADC_ss.gif

Прошивка "AT" из SDK, команда "tickps r".
Просто sleep, без включенного ADC, с ожиданием прерываний от пинов и UART:
RTL8195A_sleep.gif
Средний ток 200 мкА.
Тут не понятно, зачем он что-то делает каждые 10 сек...
----
Корреляция с документацией от Amebа (вложенной в SDK) по потреблению практически полная:
С ADC:
Снимок1576.gif
Полка на 738 мкА при измеренном 700..800 мкА.

Просто sleep (без всего):
Снимок1577.gif
Замер показал в sleep 189 мкА при активности пробуждения по пину RX UART и доп. утечки соединения модуля с RST/UART пинами и чип Flash...
 
Последнее редактирование:

pvvx

Активный участник сообщества
код Вычисляем число Пи на разных платформах!
RTL8710BN:
Код:
===== Enter Image 2 ====
System_Init1
OSC8M: 7f9a64
boot reason: 0
DONT PG EFUSE Under MP
System_Init2

Test PI2 - 100
Buffer length: 334, Free memory: 163864
Time: 7 ms (0 sec)

Test PI2 - 1000
Buffer length: 3334, Free memory: 160864
Time: 671 ms (1 sec)

Test PI2 - 10000
Buffer length: 33334, Free memory: 130864
Time: 65758 ms (66 sec)
10 тысяч знаков за 65.758 сек (в 1.42 раза медленнее RPI3 ).
При 100 знаках у ESP8266 52 мс, а у RTL8710BN всего 7 мс (в 7 раз быстрее) ...
 
Сверху Снизу