LINUX.ORG.RU

STC8051 и Linux

 8051, ,


0

1

Решил тут запилить поддержку прошива из линуксов для субжевых контроллеров. Сам код на ура генерит sdcc. Спеки есть на stc-51.com. Прошиаются по последовательному порту, программа-прошиватор на (sic!) VB6 win-only с уродливой гуйней, описания протокола нет.

В общем, лог. анализатором примерно понял протокол. Ахтунг! !!!!Big Endian!!!! В общем, вот что есть: Это пример пакета с текущими параметрами (а-ля avr fusebit'ами)

const char infopacket[] = 
{
	0x46, /* do not care */
	0xB9, /* do not care */
/* This and up to the very end is CRC protected. Edit one byte software won't recognise it */ 
	0x68, /* direction: 68 mcu2host, 6a - host2mcu */
	0x00, /* payload size, 2 bytes */
	0x39, /* payload is everything, incl. direction byte, checksum and stop byte */
	0x50,

/* 8 times the counter value, looks like freq calc */
/* Knowing the baud rate calc should be trivial. 8 samples, 2 bytes each. ~00 a7 for 5,54346 */
/* ~01 e4 for 16.06734  */ 
	0x00,
	0xA7,
	0x00,
	0xA7,
	0x00,
	0xA8,
	0x00,
	0xA7,
	0x00,
	0xA7,
	0x00,
	0xA6,
	0x00,
	0xA7,
	0x00,
	0xA7,

	0x67, /* ISP version number, stands for 6.7 */
	0x4A, /* version code J */

	0x00,
	0xD2, /* MCU id, byte 1 */
	0x64, /* MCU id, byte 2 */
	0x8C,
	0xFF,
	0xEC,
	0xF7,
	0xFF,
	0xFF,
	0xFF,
	0xFF,
	0xFF,
	0xFF,
	0xFF,
	0xFF,
	0xFF,
	0xFF,
	0xFF,
	0xFF,
	0xFF,
	0x00,
	0x00,
	0x00,
	0x00,
	0x00,
	0x57,
	0x17,
	0x40,
	0x00,
	0x57,
	0x17,
	0x40,
	0x19, /* 2 byte checksum, */ 
	0xCD, /* crc-16 with some polynome */
	0x16, /* Stop byte? always 0x16 */
};

Времяночка: http://images.netbynet.ru/img.php?4346f0282e5c28bd477aa00fdb111412.png (Все происходит на 19200 8e1. Ахтунг, в линуксовых дровах ft232 по ходу бага, и на even parity на выхлопе framing error, на днях буду рисовать патч и отправлять в LKML )

В общем, проблема только в чексумме. Нехитрым копанием VB софтины, в ней нашлись сабрутины GetCRC16 и GetCRC16Lo и GetCRC16Hi. Но проблема, что: 1. Не совсем ясно какой кусок пакета защищен CRC 2. Нестандартный полином, xor in xor out value. 3. VB софтина монструозная, кривая, толком не отлаживается ollydbg, а на выхлопе disasm'а - месиво, ибо VB.

В общем, загвоздка только в CRC. Товарищи ЛОРовские криптоаналитики, выручайте, как бы сие дело забрутфорсить. Разных пакетов могу надергать до и больше.

Вооружался этим, но пока результат не шибко положителен. http://regregex.bbcmicro.net/crcbfs.pl.txt

Еще примеры пакетов: http://pastebin.com/NX04YxmB http://pastebin.com/ejZJLrCn http://pastebin.com/i08E3Nnn

Перемещено Dimez из talks

★★★★★

Последнее исправление: AiFiLTr0 (всего исправлений: 1)

а софтину на вб где посмотреть? я в олли на пару еще с одной прогой, которая декомпилит вбшный код, принуждал софт работать без лицензии ;)

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

aol ★★★★★
()

хттп://que<еще раз>ro.org / Disassemblers_Debuggers

там внизу вб стафф. кажется, это был вб декомпилер

aol ★★★★★
()
Последнее исправление: aol (всего исправлений: 1)
Ответ на: комментарий от aol

Нет, самописный костыль на пыхпыхе с ажаксовым аплоадером, и сносом файлов по крону. Раскраска индекса - h5ai

AiFiLTr0 ★★★★★
() автор топика
Последнее исправление: AiFiLTr0 (всего исправлений: 1)
Ответ на: комментарий от aol

VB декомпайлеры я пробовал, они показывают нейтив код, но в этих рутинах там такое ассемблерное месиво, что хрен чего разберешь, особенно без возможности прогнать в дебуггере. Это не С, где ассемблерный выхлоп прост и понятен.

AiFiLTr0 ★★★★★
() автор топика
Последнее исправление: AiFiLTr0 (всего исправлений: 1)
Ответ на: комментарий от AiFiLTr0

да, я уже посмотрел одним глазом.. как-то печально не первый взгляд :/

aol ★★★★★
()
Ответ на: комментарий от bormant

Хм... Они делают через лукап таблицу значит. Будем надеяться, что они эти лукап значения не меняли.

AiFiLTr0 ★★★★★
() автор топика
Ответ на: комментарий от bormant

... включая Choose(Ind+1, ...
Правильные таблички обоих GetCRC* можно взять в списке передаваемых параметров со 2 по 256 на входе в Choose().

bormant ★★★★★
()
Ответ на: комментарий от bormant

Ах ты ж зараза. Ладно, если надо как доберусь до дома, выложу еще сколько надо пакетов, их есть у меня.

AiFiLTr0 ★★★★★
() автор топика
Ответ на: комментарий от bormant

Угу, но у меня что-то не получается раскурить/достать их из дизасма барсиковского кода.

AiFiLTr0 ★★★★★
() автор топика
Ответ на: комментарий от bormant

Нет, не подходит. Вот простой код теста:

#include <stdio.h>
#include <stdlib.h>


#define ARRAY_SIZE(arr) (sizeof(arr)/sizeof(arr[0]))

char packet[] =    {
    0x46,
    0xB9,
    0x68,
    0x00,
    0x39,
    0x50,
    0x00,
    0xA7,
    0x00,
    0xA7,
    0x00,
    0xA8,
    0x00,
    0xA7,
    0x00,
    0xA7,
    0x00,
    0xA6,
    0x00,
    0xA7,
    0x00,
    0xA7,
    0x67,
    0x4A,
    0x00,
    0xD2,
    0x64,
    0x8C,
    0xFF,
    0xEC,
    0xF7,
    0xFF,
    0xFF,
    0xFF,
    0xFF,
    0xFF,
    0xFF,
    0xFF,
    0xFF,
    0xFF,
    0xFF,
    0xFF,
    0xFF,
    0xFF,
    0x00,
    0x00,
    0x00,
    0x00,
    0x00,
    0x57,
    0x17,
    0x40,
    0x00,
    0x57,
    0x17,
    0x40,
    0x19,
    0xCD,
    0x16,
	    };

unsigned short crc16(char* data, unsigned int num)
{
	int i,j;
	unsigned short c,crc=0xFFFF;
	for (i=0;i<num;i++)
	{
		c=data[i] & 0x00FF;
		crc^=c;
		for(j=0;j<8;j++)
		{ 
			if (crc & 0x0001)
			{
				crc>>=1;
				crc^=0xA001;
			}
			else 
			{
				crc>>=1;
			}
		}
	}
	return(crc);
}


int ranges[][2] = {
	{2, -3},
	{3, -3},
	{4, -3},
	{5, -3},
};

int main()
{
	printf("Testing a crc algo\n");
	char* crc = &packet[ARRAY_SIZE(packet)-3];
	printf("Expected crc bytes: 0x%hhx 0x%hhx\n", crc[0], crc[1]);
	int i; 
	for (i=0;i<ARRAY_SIZE(ranges);i++)
	{
		printf("[%d %d]\n", ranges[i][0], ranges[i][1]);
		char* d = &packet[ranges[i][0]];
		int len = ARRAY_SIZE(packet) - ranges[i][0] + ranges[i][1];
		unsigned short crc = crc16(d,len);
		printf("Bet %d: %hx (offset=%d len=%d(%x))\n", i, crc, ranges[i][0], len, len);
	}	
}

AiFiLTr0 ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

Нет смысла, так как пропускной нормальной ты не добьешься на том железе. Я делал как-то прошу, которая дампит в vcd файлик для gtkwave. С тем, какой дескриптор ожидает Saleae я не разбирался.
armfly и saleae logic 8 сделаны на cypress'овском чипе. Это 8051 ядро, и хитровыдолбанный USB с дма, файктически интерфейсный чип с USB на параллельную шину, а не анализатор. Его только настраивают, чтобы быстро гадил с параллельного порта на усб эндпойнт без вмешательства 8051 ядра. Оттого он и держит приличную скорость.

AiFiLTr0 ★★★★★
() автор топика
Последнее исправление: AiFiLTr0 (всего исправлений: 1)
Ответ на: комментарий от XVilka

Проще на стартерките взять плату с 6м виртексом, это будет самое дешевое. Но потребует вериложенья и кодинга

AiFiLTr0 ★★★★★
() автор топика
Ответ на: комментарий от XVilka

Кстати от того же автора, что тот перлскрипт запилил, интересно, спасибо.

AiFiLTr0 ★★★★★
() автор топика
Ответ на: комментарий от AiFiLTr0

Там только Спартанец 6й, но направление мысли я понял.

XVilka ★★★★★
()
Ответ на: комментарий от AiFiLTr0

Немного оффтопика...

saleae-совместимая китайщина от armfly на 8 каналов за ~400рэ с тао.

«тао» - это имеется ввиду taobao.com? Если да, то как ты оттуда покупаешь? Оно же вроде чисто внутрикитайское...

Deleted
()

Я правильно понял, что код генерите вы сами, а потом отдаёте его VB-программе и смотрите, какой она сформировала пакет? Может тогда начать с 1 или 2 байт кода?

mky ★★★★★
()
Ответ на: комментарий от mky

Нет, там есть такая опция, запрос настройки контроллера. Это типа флагов, какой источник такстирования RC/кварц юзать, какое назначение некоторых ног, добавлять ли доп. задержку, и т.п. Все это отдается в одном пакете, описание которого выше я привел. Вот такие пакеты я и ловлю и отправляю проге для тестов.

AiFiLTr0 ★★★★★
() автор топика

Лол, охренеть. Я идиот. Бываю .
Этот «црц» - тупо сумма байтов пэйлоада, не считая стопового байта. /thread /win

AiFiLTr0 ★★★★★
() автор топика
Последнее исправление: AiFiLTr0 (всего исправлений: 1)
Ответ на: комментарий от mky

Не совсем. Я в общем сейчас закончил реверсинг, благо дело сдвинулось с мертвой точки, как запилю пруф оф концепт, вброшу себе в бложек подробную статейку.

AiFiLTr0 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.