• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

IOports и pinmap RTL8710AF

pvvx

Активный участник сообщества
Где взять полный список какие есть порты и какая периферия на них выводится?
То, что есть, является не полным.
Пример для RTL871xAF:
PinsMap8710.gif
PinFunctionRTL871xAF.gif
Но в нем нет даже UART1 b т.д.

Если брать pinmap от RTL8195AM, то те-же недочеты:
PinFunctionTable.gif
PinFunctionRTL8195AM.gif
Аналогично и у RTL8711AM:
PinFunctionRTL8711AM.gif
Есть такая табличка в области данных ROM, с именем uint16_t GPIOState[>12]. В ней каждый uint16 отведен под пины портов: A,B,C,D,E,F,G,H,...K... В каждом uint16 16 бит указывающих занятость пина данного порта периферией. После старта в ней, в порту F указана занятость кем-то (значение 0x3F) PF_0...PF_5. Кто это? :confused: Порт QSPI Flash?
----
Оказалось, что да:
GPIOCtrl(5, 0x3F, a2); - HalSPIFlashPinCtrlRtl8195A()

SPI2Pin - порт D, или E, или G
SDRPin - порт G,H,I,J,K :eek:
 
Последнее редактирование:

pvvx

Активный участник сообщества
Настучал полный PinMap для RTL:
RTL_PinMap.gif
Такой маленький :)
Указанные номера конфигурации задаются при обращении к HalPinCtrlRtl8195A(Название_устройства, номер_конфигурации, On/Off).
Всё оборудование работает и на RTL00 (RTL8710AF), но не все выводы выведены с кристалла на ножки корпуса чипа....:(
Переключения по раздельности для каждого устройства:
Код:
extern _LONG_CALL_ int HalUart0PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalUart1PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalUart2PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalSPI0PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalSPI1PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalSPI2PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalSPI0MCSPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalI2C0PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalI2C1PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalI2C2PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalI2C3PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalI2S0PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalI2S1PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalPCM0PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalPCM1PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalSDIODPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalSDIOHPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalMIIPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalWLLEDPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalWLANT0PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalWLANT1PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalWLBTCOEXPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalWLBTCMDPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalNFCPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalPWM0PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalPWM1PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalPWM2PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalPWM3PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalETE0PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalETE1PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalETE2PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalETE3PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalEGTIMPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalSPIFlashPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalSDRPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalJTAGPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalTRACEPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalLOGUartPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalLOGUartIRPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalSICPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalEEPROMPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
extern _LONG_CALL_ int HalDEBUGPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
 

Вложения

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

pvvx

Активный участник сообщества
kissste - что там с I2S? GitHub - kissste/rtl8710_mp3_decoder: mp3 decoder and webradio for boards with RTL8710, RTL8711 and RTL8195 chips
Код:
===== Enter Image 1.5 ====
Img2 Sign: RTKWin, InfaStart @ 0x10006069
===== Enter Image 2 ====

Hardware initialized. Waiting for network.
interface 1 is initialized
interface 0 is initialized
Initializing WIFI ...
WIFI initialized
tskconnect(389), Available heap 32128
RTL8195A[Driver]: set ssid [ssid]
RTL8195A[Driver]: start auth to bc:ae:c5:eb:09:90
RTL8195A[Driver]: auth success, start assoc
RTL8195A[Driver]: association success(res=2)
RTL8195A[Driver]: set pairwise key to hw: alg:4(WEP40-1 WEP104-5 TKIP-2 AES-4)
RTL8195A[Driver]: set group key to hw: alg:4(WEP40-1 WEP104-5 TKIP-2 AES-4) keyid:1
Connected after 3268ms.
Interface 0 IP address : 192.168.1.122
Got IP after 3792ms.
Connecting to server 145.58.52.149...
Reading into SPI RAM FIFO...
I2S Init
Buffer fill 5790, DMA underrun ct 0, buff underrun ct 0
На этом останавливается и всё. :( I2S там работает?
Пришлось немного поменять старт WiFi - иначе вообще не запускался...
----
Добавлено через время: С I2S всё решилось - тема тут: RTL00 MP3 player
 
Последнее редактирование:

pvvx

Активный участник сообщества
и АЦП не выведен, я правильно понимаю?
Ни DAC, ни ADC выводы не выведены на RTL8710AF, но оборудование присутствует. К ним не выведены и пины фильтров аналогового питания, по этому ADC (и DAC) использовать для чтения пустого вывода (к примеру для random) не особо выходит.
 
Последнее редактирование:

sharikov

Active member
Есть ли возможность откусить часть пинов от другой перифирии на gpio ?
Например порт E занят jtag но при работе по swd остаются свободные пины и хотелось бы их задействовать как gpio. Или выход CS порта spi переключить в режим gpio оставив только sclk, mosi, miso (выбор слейва программный).
 

pvvx

Активный участник сообщества
Есть ли возможность откусить часть пинов от другой перифирии на gpio ?
Например порт E занят jtag но при работе по swd остаются свободные пины и хотелось бы их задействовать как gpio. Или выход CS порта spi переключить в режим gpio оставив только sclk, mosi, miso (выбор слейва программный).
Сильно не копал, но если, к примеру в проекте RTL00 MP3 player включается I2S с включенным JTAG, то пишет warning и при этом I2S выход с SWD работает. На всякий случай я отключаю JTAG на время работы I2S... Приоритетность пока неизвестна.
В либах SDK3.5 hal_pinmux.c сделана с проверкой на RTL8710 и обращается к efuse и не позволяет включать всё оборудование, даже выведенное на выходы. В моей версии это исправлено. Переключается в стандарт [inline]#define RTL8710_DEF_PIN_ON 1[/inline]
Разрешение для работы другой периферии задается через efuse. В оф.SDK многое отключено, чтобы покупали более дорогой чип.
 
Последнее редактирование:

sharikov

Active member
HalPinCtrlRtl8195A() манипулирует не только битами в регистрах XXX_MUX_CTRL но и битом в
GPIO_SHTDN_CTRL. 1 когда включена и 0 когда отключена.
Когда в GPIO_SHTDN_CTRL в бите нолик соответствующий вывод чипа переходит в Z состояние. При написании программы / схемы это надо учитывать и переинициализировать gpio иначе получим плавающий уровень на выводе.
gpio_init тоже ставит соответствующий бит GPIO_SHTDN_CTRL
Без переинициализации переключать функциональность между i/o модулем и gpio функциией HalPinCtrlRtl8195A( , , 0) не получится потому что она отключит этот вывод.
"на лету" можно переключать манипуляцией битом xxxx_PIN_SEL в регистрах xxxx__MUX_CTRL: 0 - gpio, 1 - интерфейсный модуль. Проверил только вывод, что будет если направления разные непонятно.

Еще: в регистрах mux_ctrl поле mux трехбитовое а в таблице описаны только 2 бита.
 

pvvx

Активный участник сообщества
Еще: в регистрах mux_ctrl поле mux трехбитовое а в таблице описаны только 2 бита.
Что было описано в HalPinCtrl ROM-BIOS (дизасм), то и набил в таблицу. Наверняка есть другие варианты, если лезть в сами регистры, минуя Hal
 

sharikov

Active member
Найти способ переключить неиспользуемые каким либо аппаратным интерфейсом пины в режим gpio не получается.
Немного о приоритетности pin mux: попытался одновременно включить 2 mux на один и тот же порт PC, вот что получилсь:
[inline]PC0-3: UART0(mux0) и SPI0(mux1) - приоритет uart независимо от последовательности включения[/inline]
[inline]PC0 : SPI0(mux1) и PWM0(mux1) - приоритет spi0 независимо от последовательности включения[/inline]
Через jtag манипулировал битами в регистрах UART_MUX_CTL, SPI_MUX_CTL, PWM_PINMUX_CTL (HAL проверяет и не даст включить разные mux на один и тот же порт).
gpio включается когда все pin mux отключены.
 

pvvx

Активный участник сообщества
Найти способ переключить неиспользуемые каким либо аппаратным интерфейсом пины в режим gpio не получается.
Ну и ладно. И так пинов хватает. Если мало - берите какой другой чип... Важнее интерфейсы, а не голые I/O.
 

pvvx

Активный участник сообщества
на 8710 с отладкой не хватает.
другой чип в 2-4 раза дороже да и везут их похоже на верблюдах.
Зачем вам нужен вечно включенный Jtag? Я его использую только для заливки. Так быстрее отлаживать. Копаться в битах любите? :) Какая отладка в реал-тайм системе с прерываниями?

Значит вам вопрос - что это меняет(?):
*((volatile unsigned int *)0x40000020) = (*((volatile unsigned int *)0x40000020) & 0xFF0FFFFF) | 0x900000;
В хидере rtl8195a_sys_on.h это BIT_SYS_EEROM_LDO_PAR_07_04()
Без данной замены BIT_SYS_EEROM_LDO_PAR_07_04(6) на BIT_SYS_EEROM_LDO_PAR_07_04(9) не пашет SDIOH.
Что оно меняет - мне неизвестно, но путем мытарств и без JTag надыбал, что так работает и в коде SDK этого нет... Ток какой-то на шину или шо?
Т.е. тыкать Jtag-ом в чип, который имеет ресурсы распечатать всё что вам затребуется с описыванием в коде не вижу смысла. Вписать проверку с необходимым дампом и прочим быстрее, чем трассировать...
 
Последнее редактирование:
Сверху Снизу