Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

IOports и pinmap RTL8710AF

Тема в разделе "Realtek - описание, документация и обсуждение", создана пользователем pvvx, 8 окт 2016.

  1. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    10.135
    Симпатии:
    1.347
    Где взять полный список какие есть порты и какая периферия на них выводится?
    То, что есть, является не полным.
    Пример для 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:
     
    Последнее редактирование: 25 янв 2017
  2. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    10.135
    Симпатии:
    1.347
    Настучал полный PinMap для RTL:
    RTL_PinMap.gif
    Такой маленький :)
    Указанные номера конфигурации задаются при обращении к HalPinCtrlRtl8195A(Название_устройства, номер_конфигурации, On/Off).
    Всё оборудование работает и на RTL00 (RTL8710AF), но не все выводы выведены с кристалла на ножки корпуса чипа....:(
    Переключения по раздельности для каждого устройства:
    Код (C):
    1. extern _LONG_CALL_ int HalUart0PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    2. extern _LONG_CALL_ int HalUart1PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    3. extern _LONG_CALL_ int HalUart2PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    4. extern _LONG_CALL_ int HalSPI0PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    5. extern _LONG_CALL_ int HalSPI1PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    6. extern _LONG_CALL_ int HalSPI2PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    7. extern _LONG_CALL_ int HalSPI0MCSPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    8. extern _LONG_CALL_ int HalI2C0PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    9. extern _LONG_CALL_ int HalI2C1PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    10. extern _LONG_CALL_ int HalI2C2PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    11. extern _LONG_CALL_ int HalI2C3PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    12. extern _LONG_CALL_ int HalI2S0PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    13. extern _LONG_CALL_ int HalI2S1PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    14. extern _LONG_CALL_ int HalPCM0PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    15. extern _LONG_CALL_ int HalPCM1PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    16. extern _LONG_CALL_ int HalSDIODPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    17. extern _LONG_CALL_ int HalSDIOHPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    18. extern _LONG_CALL_ int HalMIIPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    19. extern _LONG_CALL_ int HalWLLEDPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    20. extern _LONG_CALL_ int HalWLANT0PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    21. extern _LONG_CALL_ int HalWLANT1PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    22. extern _LONG_CALL_ int HalWLBTCOEXPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    23. extern _LONG_CALL_ int HalWLBTCMDPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    24. extern _LONG_CALL_ int HalNFCPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    25. extern _LONG_CALL_ int HalPWM0PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    26. extern _LONG_CALL_ int HalPWM1PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    27. extern _LONG_CALL_ int HalPWM2PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    28. extern _LONG_CALL_ int HalPWM3PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    29. extern _LONG_CALL_ int HalETE0PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    30. extern _LONG_CALL_ int HalETE1PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    31. extern _LONG_CALL_ int HalETE2PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    32. extern _LONG_CALL_ int HalETE3PinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    33. extern _LONG_CALL_ int HalEGTIMPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    34. extern _LONG_CALL_ int HalSPIFlashPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    35. extern _LONG_CALL_ int HalSDRPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    36. extern _LONG_CALL_ int HalJTAGPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    37. extern _LONG_CALL_ int HalTRACEPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    38. extern _LONG_CALL_ int HalLOGUartPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    39. extern _LONG_CALL_ int HalLOGUartIRPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    40. extern _LONG_CALL_ int HalSICPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    41. extern _LONG_CALL_ int HalEEPROMPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
    42. extern _LONG_CALL_ int HalDEBUGPinCtrlRtl8195A(IN u32  PinLocation, IN BOOL   Operation);
     

    Вложения:

    Последнее редактирование: 9 июн 2017
    Simon, Sprut и kissste нравится это.
  3. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    10.135
    Симпатии:
    1.347
    kissste - что там с I2S? GitHub - kissste/rtl8710_mp3_decoder: mp3 decoder and webradio for boards with RTL8710, RTL8711 and RTL8195 chips
    Код (Text):
    1. ===== Enter Image 1.5 ====
    2. Img2 Sign: RTKWin, InfaStart @ 0x10006069
    3. ===== Enter Image 2 ====
    4.  
    5. Hardware initialized. Waiting for network.
    6. interface 1 is initialized
    7. interface 0 is initialized
    8. Initializing WIFI ...
    9. WIFI initialized
    10. tskconnect(389), Available heap 32128
    11. RTL8195A[Driver]: set ssid [ssid]
    12. RTL8195A[Driver]: start auth to bc:ae:c5:eb:09:90
    13. RTL8195A[Driver]: auth success, start assoc
    14. RTL8195A[Driver]: association success(res=2)
    15. RTL8195A[Driver]: set pairwise key to hw: alg:4(WEP40-1 WEP104-5 TKIP-2 AES-4)
    16. RTL8195A[Driver]: set group key to hw: alg:4(WEP40-1 WEP104-5 TKIP-2 AES-4) keyid:1
    17. Connected after 3268ms.
    18. Interface 0 IP address : 192.168.1.122
    19. Got IP after 3792ms.
    20. Connecting to server 145.58.52.149...
    21. Reading into SPI RAM FIFO...
    22. I2S Init
    23. Buffer fill 5790, DMA underrun ct 0, buff underrun ct 0
    На этом останавливается и всё. :( I2S там работает?
    Пришлось немного поменять старт WiFi - иначе вообще не запускался...
    ----
    Добавлено через время: С I2S всё решилось - тема тут: RTL00 MP3 player
     
    Последнее редактирование: 7 ноя 2016
  4. kovz

    kovz Новичок

    Сообщения:
    8
    Симпатии:
    0
    и АЦП не выведен, я правильно понимаю?
     
  5. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    10.135
    Симпатии:
    1.347
    Ни DAC, ни ADC выводы не выведены на RTL8710AF, но оборудование присутствует. К ним не выведены и пины фильтров аналогового питания, по этому ADC (и DAC) использовать для чтения пустого вывода (к примеру для random) не особо выходит.
     
    Последнее редактирование: 7 ноя 2016
  6. sharikov

    sharikov Авторитетный участник сообщества

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

    pvvx Активный участник сообщества

    Сообщения:
    10.135
    Симпатии:
    1.347
    Сильно не копал, но если, к примеру в проекте RTL00 MP3 player включается I2S с включенным JTAG, то пишет warning и при этом I2S выход с SWD работает. На всякий случай я отключаю JTAG на время работы I2S... Приоритетность пока неизвестна.
    В либах SDK3.5 hal_pinmux.c сделана с проверкой на RTL8710 и обращается к efuse и не позволяет включать всё оборудование, даже выведенное на выходы. В моей версии это исправлено. Переключается в стандарт #define RTL8710_DEF_PIN_ON 1
    Разрешение для работы другой периферии задается через efuse. В оф.SDK многое отключено, чтобы покупали более дорогой чип.
     
    Последнее редактирование: 30 ноя 2016
  8. sharikov

    sharikov Авторитетный участник сообщества

    Сообщения:
    604
    Симпатии:
    52
    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 бита.
     
  9. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    10.135
    Симпатии:
    1.347
    Что было описано в HalPinCtrl ROM-BIOS (дизасм), то и набил в таблицу. Наверняка есть другие варианты, если лезть в сами регистры, минуя Hal
     
  10. sharikov

    sharikov Авторитетный участник сообщества

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

    pvvx Активный участник сообщества

    Сообщения:
    10.135
    Симпатии:
    1.347
    Ну и ладно. И так пинов хватает. Если мало - берите какой другой чип... Важнее интерфейсы, а не голые I/O.
     
  12. sharikov

    sharikov Авторитетный участник сообщества

    Сообщения:
    604
    Симпатии:
    52
    на 8710 с отладкой не хватает.
    другой чип в 2-4 раза дороже да и везут их похоже на верблюдах.
     
  13. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    10.135
    Симпатии:
    1.347
    Зачем вам нужен вечно включенный 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-ом в чип, который имеет ресурсы распечатать всё что вам затребуется с описыванием в коде не вижу смысла. Вписать проверку с необходимым дампом и прочим быстрее, чем трассировать...
     
    Последнее редактирование: 8 дек 2016

Поделиться этой страницей