Arduino для RTL8710.

pvvx

Активный участник сообщества
Вот с этим там как раз и проблема, пока не скомпилируешь проект, многие вещи подсветки и почти все плюшки IntelliSense не работают - VS просто не видит исходников ардуиновских\SDK до их компиляции и в итоге пишешь код вначале вслепую. компилируешь и уже потом можно продолжить :) еще фишка - новые файлы, подключаемые с #inlude "___" VS до компиляции подсвечивает как ошибку - типа не нашла (нажимаешь скомпилировать проект - находит! ;) ).
Вот и потому и спрашивал - мало ли.. может пробовали visualgdb прикрутить - там таких болячек не должно быть... (ну и С без плюсов как то роднее.... хотя есть парадокс в этом плане у меня - проги для ПК люблю на C#\WPF писать :) )
Что-то не заметил того, что пишите:
Открыл "Примеры" - ткнул копировать - получил проект и там сразу:
Снимок1162.gif
Стоит VS2015.
 

pvvx

Активный участник сообщества
Зайду с другой стороны. В ртл можно получить доступ к файлам на внутренней флэш из браузера? Можно выполнять из - браузера же операции над файлами (копирование редактирование... есть же FREE RTOS) ?
В AVR из-за нехватки RAM часть переменных приходилось хранить в PROGMEM. В ртл RAM полно - выходит PROGMEM нафиг не нужна?
В RTL "PROGMEM" нет вообще. В MSDOS где "PROGMEM"?
 

Pilnikov

Active member
Как сохранить настройки (те же имя сети / пароль) на флэш для дальнейшего использования?
 

A_D

Active member
Что-то не заметил того, что пишите:
Открыл "Примеры" - ткнул копировать - получил проект и там сразу:
Посмотреть вложение 3085
Стоит VS2015.
Хм, интересно. Я же всегда новый проект создавал, пустой и у меня подобные приколы вылезали.. тоже VS2015 Community sp3 использую.
 

pvvx

Активный участник сообщества
Как сохранить настройки (те же имя сети / пароль) на флэш для дальнейшего использования?
Обратитесь к литературе в инет. Изучите разные конфигурации, модели API и прочее. Тогда и приходите. Вам пока рано играть в Arduino.
 

pvvx

Активный участник сообщества
Хм, интересно. Я же всегда новый проект создавал, пустой и у меня подобные приколы вылезали.. тоже VS2015 Community sp3 использую.
Наверно она цепляет то, что используется в *.ino...
Снимок1164.gif Снимок1165.gif
Да вроде и нет :) :rolleyes:
 
Последнее редактирование:

Pilnikov

Active member
Обратитесь к литературе в инет. Изучите разные конфигурации, модели API и прочее. Тогда и приходите. Вам пока рано играть в Arduino.
Придется ждать.
В native Arduino существует куча примеров с нормальным объяснением "чего и как" поэтому его и юзают куча юзверей. А тут ... - сразу "рано"
 

pvvx

Активный участник сообщества
В windows - файл pagefile.sys - чем не PROGMEM?
Это swap. Доступ к нему через файловую систему...
Где в 76РК "PROGMEM"?
И здесь тема не для обучения понятий простейшего SoC и прочих структур - здесь тема про разработку RtlDuino. Типа что и как всунуть ещё в неё "с помощью зала".
Обучение Arduino ищите на сайте Arduino - Home и там есть форум.
 

dev_n

New member

pvvx

Активный участник сообщества
Придется ждать.
В native Arduino существует куча примеров с нормальным объяснением "чего и как" поэтому его и юзают куча юзверей. А тут ... - сразу "рано"
Могу объяснить. Есть примеры. У меня знакомые работают и с Siemens и с другими ПЛК. Но вот взяли ESP8266 и не могут запустить в Arduino для ESP8266. Сначала пробовали просто примеры. Потом полезли в инет и стали тупо повторять что там показывают по ютубе. В итоге не работает. Эта куча "юзверей" наплодила кучу всякой всячины, а за время и Arduino сменилось. :) В итоге нет ничего вечного и старое не подходит. Да и умер уже ESP8266 и скоро его концепции тоже умрут.
 

Pilnikov

Active member
В итоге не работает.
А у меня работает. Пускай с огрехами, но для домашнего пользования вполне сносно. Причем с довольно широкой номенклатурой периферии. И многие вещи удалось сделать именно из-за наличия встроенного WiFi, большего, чем у ATMEGA2560 ОЗУ и потому, что
Есть дремучая Spiffs
Но мне тупо стало не хватать GPIO. И иногда RAM. Поэтому я и стал смотреть в сторону RTL.
 

alex78

New member
Часто встречаю проблемы с swd на самодельных платах.
На одной например, если плата запитана от борт сети авто, swd не поднимается вообще, приходится плясать с питанием....
На другой при включении шим силовой части, тоже часто вырубает отладку. А есть платы где все летает.
Вообщем что хотел посоветовать, 22 ома резисторы на io линию и клок, также кондер 100 пф на клок. Часто помогает такой шнурок, на проблемных платах, обычно не длинней 15-20 см, юсб удлинитель 5м выручает )
Такого номинала под рукой не было, но вот что сделал: доростил провода от программатора.. в раза увеличил. и все заработало без всяких питаний по юсб. да еще и как заработало! на 4мгц.
SEGGER J-Link Commander V4.90 ('?' for help)
Compiled Jul 28 2014 10:35:28
Info: Device "CORTEX-M3" selected (0 KB flash, 0 KB RAM).
DLL version V4.90, compiled Jul 28 2014 10:35:20
Firmware: J-Link STLink V2 compiled Dec 21 2016 15:10:22
Hardware: V1.00
S/N: 735682578
VTarget = 3.300V
Info: Found SWD-DP with ID 0x4BA01477
Info: Found Cortex-M3 r2p1, Little endian.
Info: FPUnit: 6 code (BP) slots and 2 literal slots
Info: TPIU fitted.
Info: ETM fitted.
Found 1 JTAG device, Total IRLen = 4:
Cortex-M3 identified.
Target interface speed: 4000 kHz
J-Link>h
PC = 10012A08, CycleCnt = 2481EE21
R0 = 00001815, R1 = A5A5A5A5, R2 = 0001E848, R3 = 000F4240
R4 = 00001F40, R5 = 029F1841, R6 = 00000000, R7 = A5A5A5A5
R8 = 00000008, R9 = 40233333, R10= 437F0000, R11= A5A5A5A5
R12= 0000008B
SP(R13)= 10063EB0, MSP= 1FFFFFD8, PSP= 10063EB0, R14(LR) = 10045915
XPSR = 81000000: APSR = Nzcvq, EPSR = 01000000, IPSR = 000 (NoException)
CFBP = 02000000, CONTROL = 02, FAULTMASK = 00, BASEPRI = 00, PRIMASK = 00
J-Link>s
10012A08: 80 B5 PUSH {R7,LR}

Убрал провода - снова не видит target даже на 4гкц. Уверен что китайцы впаяли не тот номинал резистора на выходах программатора. или впаяли бракованный резюк. или клякса. как эта хрень разбирается?

upd: разобрал.... там все красиво: 22 ома на на каждую шину. резисторная сборка. номиналы в порядке. палата зеленая.
 
Последнее редактирование:

KomX

Member
доростил провода от программатора.. в раза увеличил. и все заработало без всяких питаний по юсб. да еще и как заработало! на 4мгц.
Вчера получил вот такой набор модулей STLink V2+, перепрошил в JLink и столкнулся с аналогичной проблемой. Частично проблема разрешилась применением DC\DC преобразователя (5->3.3), но при скорости выше 100кГц данные принимаются нестабильно. У Вас, судя по A5A5A5A5 в регистрах, аналогичная картина.

Поскольку, начинаю осваивать стезю RTL87xx (модуль с левой прошивкой), возникла насущная необходимость в информации "for Dummies".
Нет ли где на просторах форума пошаговых инструкций как, например, прошивать модули (JFlash хочет какую-то лицензию, Flasher для RTL00 c JlinkARM.dll ругается на отсутствие этой dll-ки, а при её добавлении ещё кучу месседжей выводит).
Одним словом, информации для начинающих осваивать совершенно незнакомое "железо" катастрофически мало. Отсюда и нет никакой помощи pvvx.
 

pvvx

Активный участник сообщества
Одним словом, информации для начинающих осваивать совершенно незнакомое "железо" катастрофически мало. Отсюда и нет никакой помощи pvvx.
И не будет "помощи". У меня другие задачи.
Разобраться с описанными вами простыми проблемами может любой начинающий. То, что нет инструкций для "телепузиков" проблема самих "телепузиков". Если они не желают помогать друг другу - то я то тут при чем? Техническая информация для следующего шага им выложена, а менять общество - не моя задача. :p
 

pvvx

Активный участник сообщества
Такого номинала под рукой не было, но вот что сделал: доростил провода от программатора.. в раза увеличил. и все заработало без всяких питаний по юсб. да еще и как заработало! на 4мгц.
На 4MHz старт соединения по SWD с RTL не обязан работать. В момент соединения в CPU может быть снижен CLK. В SDK применено много энергопонижающих решений и CLK CPU и периферии переключается при неактивности. По этому старт соединения надо производить к примеру на 400 кГц и только после сброса SoC уже переходить на 4MHz или выше.
Так что не китайцы и не длина провода (или глупости с припаиванием резисторов и кондеров) тут виноваты. :p
Больше всего сказывается криворукость по соединениям общих (GND) проводов и не соблюдение нормативов питаний. На это можно смело дать 99%. Остальное - это уже качество Jtag/SWD адаптера. Я не думаю, что вы попали в тот процент, что неисправен Jtag/SWD адаптер или модуль RTL00.

Чтобы исключить другие варианты, связанные с отключенным Jtag итерфейса в модуле, необходимо кому-то переписать код, заливаемый в STLink - вывести на разъем 5-ть сигналов: SWD, RX-TX(VCOM), RESET. Это уже может сделать любой студент – исходники и загрузчики Jlink в инете есть. Тем более SEGGER ведет политику по захвату рынка (и IoT особенно(!)) для продажи своего ПО и решений ОЕМ адаптеров крупным производителям с получением процентов с каждого произведенного устройства. Интерфейс SWD может стать стандартом для “холодильников” и прочего хлама с MCU. Вас и кухонного уровня это не касается, но данный контингент дает дополнительную рекламу и запрещать баловаться SEGGER не будет. Не те времена и не те ставки. :p Jlink OB от SEGGER стоит 10 центов в больших партиях. :p
Всякие CMIS-DAP и прочий хлам отладчиков и перепрошивальщиков для среднему хламу устройств давно переплюнут SEGGER со своими JLink...
Т.е. если вы лепите некоммерческую фигню – это не запрещено в лицензии SEGGER.
Так-же уже давно выложены все доки, вплоть до RM08001_JLinkUSBProtocol.pdf, а то, что "детки" не могут всё освоить - не моё дело :)
Из дока RM08001_JLinkUSBProtocol.pdf (2010 год):
2.1.1 Что вы можете сделать
Вы можете использовать информацию, содержащуюся в данном документе, чтобы добавить поддержку для широкого распространения SEGGER J-Link ARM эмулятора и версии OEM в программном обеспечении с открытым исходным кодом.

2.1.2 Что вы не можете сделать
Вам не разрешается использовать информацию, содержащуюся в данном документе,
· чтобы построить J-Link клонов
· чтобы построить J-Link совместимых эмуляторов
 
Последнее редактирование:
  • Like
Реакции: KomX

pvvx

Активный участник сообщества
Вопрос по теме - а Вы пробовали с использованием visualgdb для Visual Studio делать прошивку для RTL871x ?
Попробовал - собралось без проблем.
Что ему не собраться-то, если он собирается одной командой из командной строки: [inline]mingw32-make.exe -s[/inline] ? :confused:
Снимок1168.gif
И если да - то, можете пожалуйста написать кратчайшую инструкцию что и как делать, что бы скомпилировать хотя бы минимальный проект с Вашим вариантом SDK ? (я пробовал, скачал arm-none-eabi-gcc, но вот с его настройками, флагами запутался и в итоге как то не вышло...)
Кратчайшая инструкция, но делать последовательно(!):
1) купить VisualGDB
2)Запустить в нем [inline]mingw32-make.exe -s[/inline] :)
---
С Arduino отладка с J-link тоже в нем работает:
Снимок1167.gif
Только вот исходников у в Arduino нет.
 

A_D

Active member
Попробовал - собралось без проблем.
Что ему не собраться-то, если он собирается одной командой из командной строки: [inline]mingw32-make.exe -s[/inline] ? :confused:

Кратчайшая инструкция, но делать последовательно(!):
1) купить VisualGDB
2)Запустить в нем [inline]mingw32-make.exe -s[/inline] :)
Хм. видимо для меня нужна несколько расширенная инструкция.... то ли я не так понял. я ставил "купленную" VisualGDB, там arm-none-eabi-gcc нету же, его отдельно я ставил (распаковывал, выбирал даже тупо тот, что в ардуино-версии RTL), выбираешь в VisualGDB что используется сторонний компилятор, не указываем конкретные параметры МК (RTL871x поддержки оффициальной нету ) и далее... куча параметров.. на этом я и запутался. (смотрел инструкции по типу этой - на вот этом шаге - http://visualgdb.com/w/wp-content/uploads/tutorials/arm/legacy/03-flags.png я и застрял)
 

pvvx

Активный участник сообщества
Хм. видимо для меня нужна несколько расширенная инструкция.... то ли я не так понял. я ставил "купленную" VisualGDB, там arm-none-eabi-gcc нету же, его отдельно я ставил (распаковывал, выбирал даже тупо тот, что в ардуино-версии RTL), выбираешь в VisualGDB что используется сторонний компилятор, не указываем конкретные параметры МК (RTL871x поддержки оффициальной нету ) и далее... куча параметров.. на этом я и запутался. (смотрел инструкции по типу этой - на вот этом шаге - http://visualgdb.com/w/wp-content/uploads/tutorials/arm/legacy/03-flags.png я и застрял)
Debug запускал ни о чем не думая через это:
Снимок1171.gif
Он даже загрузку пытается сделать в RAM, но неверно стартует - не отключает Flash...
Поэтому выходит отладка только программы записанной в Flash.
Нафих этот платный VisualGDB (помойка, которая не может просто поставить ядро M3) - Eclipse привычнее и кросплатф..
Поддержки RTL со всеми регистрами как у STM не дождетесь, пока кто бесплатно им не сделает, а за это они будут требовать с вас :)
 
Последнее редактирование:

pvvx

Активный участник сообщества
Тест скорости приема по UDP и TCP в текущей версии RtlDuino с помощью iperf.exe из SDK (при установках параметров WiFi по умолчанию).
На компе
для TCP [inline]iperf.exe -c 192.168.1.122 -i 1 -t 25 -w 64k -p 5001[/inline]
для UDP [inline]iperf.exe -c 192.168.1.151 -i 1 -t 25 -w 320k -p 5001 -u -b 54M[/inline]
Код:
/*
   Test TCP read -> #define TEST_TCP
   iperf.exe -c 192.168.1.122 -i 1 -t 25 -w 64k -p 5001
   Test UDP read -> //#define TEST_TCP
   iperf.exe -c 192.168.1.151 -i 1 -t 25 -w 320k -p 5001 -u -b 54M
*/
#include <WiFi.h>
#include <WiFiUdp.h>
#include <myAP.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#if 0 // ESP-32S
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/time.h>
#else
extern "C" {
#include <lwip/sockets.h>
}
#endif

#define TEST_TCP

#define BUFSIZE 2048
#define PORT 5001

//char ssid[] = "mynetwork"; //  your network SSID (name)
//char pass[] = "mypassword";    // your network password (use for WPA, or use as key for WEP)
//int status = WL_IDLE_STATUS;

WiFiUDP Udp;
char server[] = "192.168.1.2";
int port = 5001;
uint8_t buf[BUFSIZE];
int sockfd, optval;

struct sockaddr_in serveraddr, clientaddr;
int clientaddr_len = sizeof(clientaddr);

struct hostent *hostp;
char *hostaddrp;

long datacount = 0;

uint32_t delta_time_ms, tik;

void setup() {
  Serial.begin(38400);
  delay(10);

  // We start by connecting to a WiFi network

  Serial.println();
  Serial.println("WiFi Connect...");
  delta_time_ms = millis();
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(100);
    Serial.print(".");
  }
  delta_time_ms = millis() - delta_time_ms;
  Serial.println();
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  Serial.print("Time connect = ");
  Serial.print(delta_time_ms);
  Serial.println(" ms");

  Serial.println("Wait data...");
#ifdef TEST_TCP
  sockfd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); // SOCK_STREAM, SOCK_DGRAM
#else
  sockfd = socket(PF_INET, SOCK_DGRAM, 0); // SOCK_STREAM, SOCK_DGRAM
#endif
  if (sockfd < 0) {
    Serial.println("ERROR opening socket");
    while (1);
  }

  optval = 1;
  setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (const void *)&optval , sizeof(int));

  memset(&serveraddr, 0, sizeof(serveraddr));
  serveraddr.sin_family = PF_INET;
  serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
  serveraddr.sin_port = htons(PORT);
  if (bind(sockfd, (struct sockaddr *) &serveraddr, sizeof(serveraddr)) < 0) {
    Serial.println("ERROR on binding");
    while (1);
  }
#ifdef TEST_TCP
  if (listen(sockfd, 1) < 0) {
    Serial.println("ERROR listen");
    while (1);
  }
#endif
  delta_time_ms = millis();
}

void loop() {
#ifdef TEST_TCP
  int x = accept(sockfd, 0, 0);
  while (x > 0) {
    int n = read(x, buf, BUFSIZE);
    if (n < 0) Serial.println("ERROR in recvfrom");
    else if (n) {
      datacount += n;
      if (millis() - delta_time_ms >= 1000) {
        Serial.print("Average: ");
        if (datacount < 8192) {
          Serial.print(datacount);
          Serial.println(" bytes/sec");
        }
        else {
          Serial.print(datacount / 1024);
          Serial.println(" kbytes/sec");
        }
        datacount = 0;
        delta_time_ms = millis();
      }
    }
    else break;
  }
#else
  int n = recvfrom(sockfd, buf, BUFSIZE, 0, (struct sockaddr *) &clientaddr, (socklen_t*)&clientaddr_len);
  if (n < 0) Serial.println("ERROR in recvfrom");
  else {
    datacount += n;
    if (millis() - delta_time_ms >= 1000) {
      Serial.print("Average: ");
      if (datacount < 8192) {
        Serial.print(datacount);
        Serial.println(" bytes/sec");
      }
      else {
        Serial.print(datacount / 1024);
        Serial.println(" kbytes/sec");
      }
      datacount = 0;
      delta_time_ms = millis();
    }
  }
#endif
}
Лог
Код:
@@@@@@@@@
TCP
@@@@@@@@@
...
IP address: 192.168.1.151
Time connect = 3710 ms
Wait data...
Average: 24 bytes/sec
Average: 1284 kbytes/sec
Average: 1410 kbytes/sec
Average: 1435 kbytes/sec
Average: 1508 kbytes/sec
Average: 1468 kbytes/sec
Average: 1267 kbytes/sec
Average: 1306 kbytes/sec
Average: 1320 kbytes/sec
Average: 1401 kbytes/sec
Average: 1412 kbytes/sec
Average: 1378 kbytes/sec
Average: 1444 kbytes/sec
Average: 1418 kbytes/sec
Average: 1477 kbytes/sec
Average: 1363 kbytes/sec
Average: 1324 kbytes/sec
Average: 1281 kbytes/sec
Average: 1317 kbytes/sec
Average: 1405 kbytes/sec
Average: 1434 kbytes/sec
Average: 1461 kbytes/sec
Average: 1402 kbytes/sec
Average: 1300 kbytes/sec
Average: 1410 kbytes/sec
...
@@@@@@@@@
UDP
@@@@@@@@@
...
IP address: 192.168.1.151
Time connect = 3783 ms
Wait data...
Average: 1470 bytes/sec
Average: 2865 kbytes/sec
Average: 2862 kbytes/sec
Average: 2865 kbytes/sec
Average: 2859 kbytes/sec
Average: 2865 kbytes/sec
Average: 2858 kbytes/sec
Average: 2865 kbytes/sec
Average: 2819 kbytes/sec
Average: 2815 kbytes/sec
Average: 2836 kbytes/sec
Average: 2868 kbytes/sec
Average: 2862 kbytes/sec
Average: 2846 kbytes/sec
Average: 2869 kbytes/sec
Average: 2859 kbytes/sec
Average: 2850 kbytes/sec
Average: 2859 kbytes/sec
Average: 2853 kbytes/sec
Average: 2840 kbytes/sec
Average: 2853 kbytes/sec
Average: 2850 kbytes/sec
Average: 2855 kbytes/sec
Average: 2861 kbytes/sec
Average: 2862 kbytes/sec
Average: 2865 kbytes/sec
...
 
Последнее редактирование:
Сверху Снизу