Arduino + Vendista 2g

всем добра! подскажите пожалуйста, что я делаю не так?
имею купленную с рук vendista V2.0, ей до меня ни кто не пользовался отдали за символическую сумму. зарегистрировал терминал на сайте, перевел в режим Slave, подключил к ардуино mega TX-RX, RX-TX, GND общий.
vendista c родного сайта отзывается, обновил прошивку, перегрузил.
а проблема в том, что vendista не откликается на команды с меги, а вот мега команду vendista 17 - касание экрана получает.
команды беру с мануала режима и ни одна не работает, что я упустил?

Спойлер

void setup()
{
Serial.begin(115200);
Serial1.begin(115200);

byte arr = {0x01, 0x00, 0xE3, 0x02, 0x05};
for (byte i=0; i<5; i++){
Serial1.write((byte)arr[i]);
}
}
void loop() {
}

Наверно подсчет контрольной суммы не правильный. Спрашивай в техподдержке, может в прошивке что то поменялось.

пакеты беру с их мануала, перепроверил в них всё правильно. прошивку откатил с 89 до 86 чтоб наверняка, толку нет

А что вы передаёте на терминал в вашем скетче?
В документации в конце есть пример подсчета контрольной суммы CRC16. Я вообще не вижу где вы в скетче производите подсчет контрольной суммы. То что вы передаёте, терминал не понимает, по этому и не делает ничего.

Тип пакета
(1 байт)
0x05 (Reboot) Перезагрузить терминал

Контрольная сумма обычно передаётся последними 2 байтами

это же пакет с мануала, в нем уже подсчитана CRC. я пока просто для теста подключения юзаю. готовый пакет отсылаю для чего заново пересчитывать CRC16.

Можете сказать где в ваших 5 байтах контрольная сумма. При этом вы говорите что команда 0x05 это перезагрузка. В мануале все примеры даны без контрольной суммы. Добавте 2 байта CRC16 за 0x05 и терминал всё выполнит.

из мануала

  1. Длина Тела пакета (2 байта)
  2. CRC16 Тела пакета (2 байта)
    3.Тип пакета (1 байт)
    4.Данные (от 0 до 254 байт)
    в моем случае только тип пакета, так как в Reboot нет данных,
    да и картинки тоже не получается отобразить на экране командой
    byte arr = {0x02, 0x00, 0xF7, 0xF5, 0x03, 0x01};

вот в данном примере 0xF7, 0xF5 не CRC16?

Я работал с 2 типами терминалов вендотек и тукан и у обоих контрольная сумма была в конце пакета данных. Ещё раз внимательно мануал изучите. Попробуйте проверить даже в том пакете что отсылаете правильность контрольной суммы. Проверте физическое соединение устройств (та ли нога TX у меги вами взята)

https://docs.google.com/document/d/11sRFs3bmJVN7FuXPvHA6fC1QKYyDlhKa/edit?pli=1
спасибо за советы, сам уже сто раз перепроверил, руководствуюсь мануалом, serial1 правильно подключен, с терминала пока только одну команду но получаю, даже кабели прозвонил

ссылка на мануал, прочитал еще раз CRC идет перед типом пакета, жалко что вы не работали с vendista, кстати она на stm32 и sim8000 сделана

Для начала сделайте так

обсуждать код без номеров строк никто не станет

вот задумка родилась, Вы не подскажите кто сможет библиотеку написать под вендисту, это вообще реально?

код подсчета CRC16 для вендисты.

Спойлер
// работает, вычесляем CRC16

#define u8 unsigned char
#define u16 unsigned short

u16 crcTable [256];
byte mes = {0x03, 0x01}; //тело пакета для вычисления crc16

void MakeCRC16Table()
{
u16 r;
int s, s1;
for(s = 0; s < 256; s++)
{
r = ((u16)s)<<8;
for (s1 = 0; s1 < 8; s1++)
{
if (r&(1<<15))
r = (r<<1)^0x8005;
else
r = r<<1;
}
crcTable[s] = r;
}
}

u16 GetCRC16(const u8 *buf, u16 len)
{
u16 crc;
crc = 0xFFFF;
while (len–)
{
crc = crcTable [((crc>>8)^*buf++)&0xFF] ^ (crc<<8);
}
crc ^= 0xFFFF;
return crc;
}

void setup()
{
MakeCRC16Table();
Serial.begin(115200);
}

void loop()
{
uint16_t data2 = GetCRC16(mes, sizeof(mes));
Serial.println(data2, HEX);//получаем CRC16 в виде hex

}

Задумщик, очевидно же!

А что, у протокола mdb нет библиотек? Или мне показалось?

Я не знаю, вопрос не в то окно.

1 лайк

Всем добрый день! Зашел на почту и увидел эту тему.

Мне удалось подключить Vendista, но уже к stm32. У вендисты есть пример подключения для этого микроконтроллера с использованием операционной системы реального времени FreeRTOS, также в их коде есть серьезная ошибка (и еще тонны других) и это первое что придется решить начинающим, помимо неправильно названных переменных и грамматических ошибок. Возможно разработчики для вендисты писали код пьяными или в угаре, немало нервов я потратил.

Если вы думаете о вендинге, то переходите с ардуино и используйте FreeRTOS, для сложных систем операционка вещь необходимая. Темы на разных сайтах по вендисте открыты мной. Мой контакт: @ToradoSame в телеграмме