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

Как шить RTL8710 под Linux (Ubuntu 16.04)?

Тема в разделе "Realtek - SDK, прошивки и утилиты", создана пользователем Astren, 8 фев 2017.

Метки:
  1. Astren

    Astren Новичок

    Сообщения:
    6
    Симпатии:
    0
    Добрового времени суток,

    Собственно, после некоторых развлечений с esp8266 попал в руки rtl8710. Вот, как на картинке:

    [​IMG]

    по форм фактору такой же как esp, и вроде как это тоже полноценный dev-board. Esp шился через esptool, тут тоже пробовал, но как и было ожидаемо, не вышло. Пытался через openocd c интерфейсами "stlink-v2-1.cfg" и "cmsis-dap.cfg".. падает на попытке подключения к устройству (не распознаёт). Права проверил :) запускал под рутом и chmod 666 на /dev/ttyUSB0 тоже делал.
    Дрова стоят на ch341 и модуль загружен, в dmesg устройство тоже есть, как и в lsusb, могу подключится через screen /dev/ttyUSB0 38400 -- пишет много ошибок ioctl[SIOCSIWFREQ] error (беспрерывно) но тем ни менее AT команды выполняет.
    Через lsusb выглядит как:
    Bus 001 Device 022: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter

    т.е. не как cmis-dap устройство.

    Качал сдк без нда (которая 3.5а), там есть гайд для линукса (той-же убунты), но 1) устройство не появляется как mbed в файловом менджере, 2) оно не распознаётся как cmis-dap и тот-же openocd падает на попытке обнаружить cmis-dap устройство. Пробовал указать openocd конкретный порт -- писать отказался.

    И, собственно сабж -- как же его таки шить?
     
  2. sharikov

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

    Сообщения:
    547
    Симпатии:
    51
    Arduino для RTL8710.

    Вам нужно раздобыть (купить/спаять/украсть/родить/другое) JTAG адаптер. Подключить его по SWD или JTAG (все используют SWD потому что проводов меньше). Шить openocd. Перед тем как шить обязательно слейте дамп фуллфлэш для восстановления если что-то пойдет не так.

    Без внешних приблуд RTL не шьется.

    SDK сейчас скачивают отсюда:
    GitHub - pvvx/RTL00MP3: RTL00(RTL8710AF) Test MP3
     
    Astren нравится это.
  3. pvvx

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

    Сообщения:
    8.394
    Симпатии:
    1.271
    Через имеющуюся на модуле прошивку "AT", предварительно сделать-скомпилировать специальную версию файла OTA, и залить в модуль по WiFi.
    Специальная версия файла OTA может иметь загрузчик по UART. Примеры давно даны, часть на rtlDuino, но rtlDuino не адаптирован под линух.
    Другой вариант: Спросить у продавца, продавшего вам данную плату. Поставить ему минус, за то, что она не работает как заявлено. Описать ситуацию в отзывах, чтобы другие не нарвались на эти проблемы при покупке подделки под ESP8266. Модуль то другой и требует другого ПО и/или распайки с поставляемым ПО. Можно затребовать и прошивку совместимую с проданной платой (поддерживающую работу по напаянной USB-UART микросхеме).
    К примеру модули от производителя RAK (Разнообразные модули с RTL871x и RTL8195.) имеют такие функции.
    Но можно остаться "Буратиной" на Поле чудес в стране Китай-али-экспресс... :)
     
    Последнее редактирование: 8 фев 2017
    Astren нравится это.
  4. pvvx

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

    Сообщения:
    8.394
    Симпатии:
    1.271
    Схемкой не кинетесь на описываемый у топикастера платку?
    Вдруг доделаю boot с загрузкой по UART - потребуется, а такой платки нет...
     
  5. Astren

    Astren Новичок

    Сообщения:
    6
    Симпатии:
    0
    Спасибо, буду пробовать :)
     
  6. Astren

    Astren Новичок

    Сообщения:
    6
    Симпатии:
    0
    Так и сделал -- собрал из RaspberryPi, теперь могу писать через openocd, читать, подключаться через телнет. Сделал дамп всей памяти, собрал с СДК бинарник, но вот незадача, куда ни пишу его, ощущение, что от этого ничего не меняется.
    Так что следующий вопрос, на какой адрес писать через openocd, чтобы прошивка таки возымела действие?

    sudo openocd -d1 -f rtl8710.cfg -c "init" -c "reset halt" -c "load_image ram_all.bin 0x10001000 bin" -c "shutdown"

    пробовал разные адреса, всюду пишет, говорит:
    325560 bytes written at address 0x10001000
    downloaded 325560 bytes in 2.789898s (113.957 KiB/s)

    В rtl8710.cfg поместил конфигурацию от ameba, добавив только пару строк в начало, для совместисости с raspberryPi:

    source [find interface/raspberrypi2-native.cfg]
    transport select swd

    # === Further the default ameba sdk openocd configuration for the RTL8710 ===
    set CHIPNAME rtl8195a
    set CHIPSERIES ameba1

    # Adapt based on what transport is active.
    source [find target/swj-dp.tcl]

    if { [info exists CHIPNAME] } {
    set _CHIPNAME $CHIPNAME
    } else {
    error "CHIPNAME not set. Please do not include ameba1.cfg directly."
    }

    if { [info exists CHIPSERIES] } {
    # Validate chip series is supported
    if { $CHIPSERIES != "ameba1" } {
    error "Unsupported chip series specified."
    }
    set _CHIPSERIES $CHIPSERIES
    } else {
    error "CHIPSERIES not set. Please do not include ameba1.cfg directly."
    }

    if { [info exists CPUTAPID] } {
    # Allow user override
    set _CPUTAPID $CPUTAPID
    } else {
    # Ameba1 use a Cortex M3 core.
    if { $_CHIPSERIES == "ameba1" } {
    if { [using_jtag] } {
    set _CPUTAPID 0x4ba00477
    } {
    set _CPUTAPID 0x2ba01477
    }
    }
    }

    swj_newdap $_CHIPNAME cpu -irlen 4 -expected-id $_CPUTAPID

    set _TARGETNAME $_CHIPNAME.cpu
    target create $_TARGETNAME cortex_m -chain-position $_TARGETNAME


    # Run with *real slow* clock by default since the
    # boot rom could have been playing with the PLL, so
    # we have no idea what clock the target is running at.
    adapter_khz 1000

    # delays on reset lines
    adapter_nsrst_delay 200
    if {[using_jtag]} {
    jtag_ntrst_delay 200
    }


    # Ameba1 (Cortex M3 core) support SYSRESETREQ
    if {![using_hla]} {
    # if srst is not fitted use SYSRESETREQ to
    # perform a soft reset
    cortex_m reset_config sysresetreq
    }

    $_TARGETNAME configure -event reset-init {ameba1_init}

    # Ameba1 SDRAM enable
    proc ameba1_init { } {
    # init System
    mww 0x40000014 0x00000021
    sleep 10
    mww 0x40000304 0x1fc00002
    sleep 10
    mww 0x40000250 0x00000400
    sleep 10
    mww 0x40000340 0x00000000
    sleep 10
    mww 0x40000230 0x0000dcc4
    sleep 10
    mww 0x40000210 0x00011117
    sleep 10
    mww 0x40000210 0x00011157
    sleep 10
    mww 0x400002c0 0x00110011
    sleep 10
    mww 0x40000320 0xffffffff
    sleep 10
    # init SDRAM
    mww 0x40000040 0x00fcc702
    sleep 10
    mdw 0x40000040
    mww 0x40005224 0x00000001
    sleep 10
    mww 0x40005004 0x00000208
    sleep 10
    mww 0x40005008 0xffffd000
    sleep 13
    mww 0x40005020 0x00000022
    sleep 13
    mww 0x40005010 0x09006201
    sleep 13
    mww 0x40005014 0x00002611
    sleep 13
    mww 0x40005018 0x00068413
    sleep 13
    mww 0x4000501c 0x00000042
    sleep 13
    mww 0x4000500c 0x700 ;# set Idle
    sleep 20
    mww 0x40005000 0x1 ;# start init
    sleep 100
    mdw 0x40005000
    mww 0x4000500c 0x600 ;# enter memory mode
    sleep 30

    mww 0x40005008 0x00000000 ;# 0xf00
    ;# mww 0x40005008 0x00000f00
    sleep 3
    mww 0x40000300 0x0006005e ;# 0x5e
    ;# mww 0x40000300 0x0000005e
    sleep 3
    }
    # === end of the ameba configuration ===

    После того как записывает новую прошивку, всё так же позволяет выполнять AT команды, а эту новую прошивку будто бы и не замечает.. Может кто подскажет, как запустить новую прошивку?
     
  7. Astren

    Astren Новичок

    Сообщения:
    6
    Симпатии:
    0
    Похоже, оишибку что была в том скрпте я нашёл -- там я не писал в флеш:
    sudo openocd -d3 -f rtl8719.cfg -c "init" -c "reset halt" -c "flash write_image erase ram_all.bin 0x98000000" -c "shutdown"

    Но тут незадача тоже, падает с ошибкой:
    User : 2039 409 command.c:687 command_run_line(): invalid subcommand "write_image erase ram_all.bin 0x98000000"

    По телнету ответ на flash bank list, пустой. но настроить их не даёт, говоря, что flash bank command must be used before 'init'.
     
  8. pvvx

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

    Сообщения:
    8.394
    Симпатии:
    1.271
    1) что и куда пишите?
    2) чем пишите? (Что OpenOCD уже ясно)
    3) что записываете в 9-й сектор Flash? Может там стоит запуск OTA по состоянию пина, а вы пишите другую область (не OTA)?
     
  9. pvvx

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

    Сообщения:
    8.394
    Симпатии:
    1.271
    Вы пока говорите сами с собой - никто не сможет вам ответить пока не уточните вопросы выше.
     
  10. Astren

    Astren Новичок

    Сообщения:
    6
    Симпатии:
    0
    1)
    Что: пока что скомпилировал прошивку, которая должна мне напечатать "Hello world".
    Куда: Куда писать новую прошивку я не знаю. Хочу чтобы у меня вместо интерфейса AT команд при запуске просто напечаталось Hello world. Ну, следуя логике пишу на флеш.

    2) По совету товарища выше "собрал" swd programmer из raspberry pi, у него уже есть gpio пины и мне понадобилось только три female-female кабеля для подключения чипа на прямую к PI. Не совсем понял Ваш вопрос, возможно мне ещё что-то нужно кроме openocd и swd programmer'a?

    3) Сектор флэш, как я уже сказал выше, я выбираю наугад, т.к. совсем не знаю куда надо записать, чтобы заработало.
     
  11. Astren

    Astren Новичок

    Сообщения:
    6
    Симпатии:
    0
    Союственно, я собрал и прошил, оно заработало, использовал код вот этого деятеля:
    rebane / rtl8710 / source / — Bitbucket
    Минимально его изменив под Pi, т.к. из окробки он не работал. Смотря на него и на то как предлаегеат флащать СДК, складывается ощущение, что они все это делают кусками -- пилят бинарник на блоки и пишут уже по очереди их. Я пытался всё время просто через flash_write у openocd, и оно не работало. Может подскажете, в чём сакральный смысл распила на блоки, да и в целом посоветуете направление, где об этом всём в целом можно почитать (о прошивке микроконроллеров)?
     
  12. pvvx

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

    Сообщения:
    8.394
    Симпатии:
    1.271
    По вашему логу вы "пишите" в RAM: "load_image ram_all.bin 0x10001000 bin"

    Пока не видел SWD программатора "из raspberry pi". Может существует и такой зверь... Типов программаторов JTAG/SWD много.
    Вы его проверили - он работает?
    Во первых, ещё раз - чем записать?
    Пока выяснили:
    ПО - OpenOCD.
    Программатор: - пофиг какой, но должен работать.
    Сама программа программирования Flash в чипе RTL8710: - Уже существует более трех вариантов:
    a) Заливка специального кода программатора в RAM чипа и исполнение её с передачей данных ей по SWD (обычно в буфер RAM).
    b) Программирование Flash через регистры по SWD
    c) Программирование через SPIC (отображающий Flash в адресное пространство), предварительно проинициализировав контролер SPIC в чипе по SWD
    Вы говорите, что пытаетесь запустить по варианту "a)", код от rebane... Но у него нет скрипта что и куда писать.

    Что и куда шить в Flash: RTL871x Flash Memory Map
     
    Последнее редактирование: 9 фев 2017
    Astren нравится это.
  13. sharikov

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

    Сообщения:
    547
    Симпатии:
    51
    RTL сейчас прошивают используя код
    f28 / rtl8710_openocd — Bitbucket
    В коде rebane есть ошибки.
    Смысл распила: шьют из рам во флэш. Вся прошивка целиком в рам не помещается. Заливают в рам кусок и шьют и так далее.

    Шить через flash_write можно те чипы поддержка которых вкомпилировна в openocd. Про rtl openocd естественно ничего не знает поэтому используется скрипт.
    О прошивке микроконтроллеров читайте:
    https://sourceforge.net/p/openocd/code/ci/master/tree/contrib/loaders/flash/
    https://sourceforge.net/p/openocd/code/ci/master/tree/src/flash/nor/
     
    Astren нравится это.
  14. pvvx

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

    Сообщения:
    8.394
    Симпатии:
    1.271
    А ваша версия "вкомпилировна в openocd" ?
    Там "по стандарту" в CMSIS-DAP табличка адресов функций и адрес бреак, а не отслеживание состояний байтов в RAM. Подготовили параметры в регистрах CPU, поставили точку останова и запустили...
    Пример DAPLink/flash_blob.c at nucleo_webusb · devanlai/DAPLink · GitHub

    USB DFU
    The firmware has an additional USB Device Firmware Upgrade interface that can be used to flash the target microcontroller instead of the mass-storage drag'n'drop interface.

    WebUSB
    The firmware reports descriptors for WebUSB support, allowing whitelisted websites to access certain USB interfaces. Currently, the only interface accessible is the new USB DFU interface, which can be used to reprogram the target directly from the browser.

    In the future, CMSIS-DAP commands could be proxied through another USB interface to allow direct SWD debug access from the browser.


    ист: Home · devanlai/DAPLink Wiki · GitHub

    По этому указанный вами код программатора никому не нужен :p
    C-интегрируйте в DAPLink... Ameba тоже сделала не по стандарту, теперь мучаются - Arduino/misc/dap_firmware at master · Ameba8195/Arduino · GitHub Но их ход понятен - чтобы вы купили только их отладочную плату :)
     
    Последнее редактирование: 11 фев 2017
    Astren нравится это.
  15. sharikov

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

    Сообщения:
    547
    Симпатии:
    51
    Информация тем кто будет собирать openocd с git.

    Свежий из git с флэшером Rebane не работает. Разработчики решили что поддержка стандартных команд tcl никому не понадобится и отключили их при конфигурировании jimtcl.
    Чтобы заработало нужно перед пропатчить конфиг
    патч
    openocd.zylin Code Review - openocd.git/commitdiff
    мэйллист
    OpenOCD - Open On-Chip Debugger / Mailing Lists
     
  16. АндрейМ

    АндрейМ Новичок

    Сообщения:
    69
    Симпатии:
    1
    смысл перехода на 10.х вообще есть, что-бы с пересборкой заморачиваться?
     
  17. sharikov

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

    Сообщения:
    547
    Симпатии:
    51
    Я изменений не заметил
     
  18. A.V

    A.V Новичок

    Сообщения:
    24
    Симпатии:
    1
    Буквально только что поправил "под себя" скрипты RtlDuino - через JLinkRAM шьется нормально. Мож кому пригодится (как идея)

    Требования:
    - JLink (перешитый STLink V2) с прописанными правилами в udev
    - Установленные утилиты от Segger
    - Настроенный почти по инструкции RtlDuino (пришлось сместить пути, чтобы папка rtl87xx оказалась там, где рекомендуется в мануале - git clone даёт пару лишних)
    - (недо-)патченный rtl87xx/platform.txt (править вхождения jlink_upload.cmd на jlink_upload.sh)
    - переписанный rtl87xx/jlink_upload.sh
    выложил в gist: rtlDuino (RTL87xx dev) Arduino@linux upload (Note: only JLinkRAM tested) · GitHub
     
  19. pvvx

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

    Сообщения:
    8.394
    Симпатии:
    1.271
    В rtlDuino добавлены и cmsis-dap c загрузкой в SDRAM для RTL серии "A" с моим boot. Но ещё не опубликованы...
    Снимок48.gif
    Не доделал загрузку OPENOCD в Arduino, т.к. лень - у меня она стоит и установка скриптами не требуется :) Да и вообще rtlDuino тыкаю в самую последнюю очередь, когда уже других активных тем нет. :)

    Примеры можно взять из RTL00_WEB/flasher.mk at master · pvvx/RTL00_WEB · GitHub
    Серия RTL "B" Flash шьется и загружается/запускается код в SRAM через UART на 1.5Мбод скриптом Питона (выложено в соответствующей теме).
     
    Последнее редактирование: 28 дек 2017

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