реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> как определить конец пакета ?
krux
сообщение Aug 16 2013, 17:15
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



посмотрете G.7041/Y.1303 aka GFP, там много интересного.
любая топология, хочешь - точка-точка, хочешь - точка-многоточка, хочешь - кольцо.
Вот только не для микроконтроллера это.

Для МК имхо лучше всего что-то в духе:

DWORD barker-like start sequence
WORD DestSlave + WORD OpCode
DWORD Length
DWORD Header CRC16
DWORD Data1
DWORD Data2
...
DWORD DataLast
DWORD Payload CRC16


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Aug 17 2013, 06:35
Сообщение #17


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(Dr.NoA @ Aug 16 2013, 13:32) *
Советую использовать байтстаффинг по алгоритму Consistent Overhead Byte Stuffing

огромное респектище
даже если я не понял суть этого, то устранение "вредных" кодов в принципе возможно
причем не только одного, типа 0x00, но и нескольких, например, 0x00, 0xff, плюсом по байту на каждый код

еще что-то на тему cobs www.inescporto.pt/~jsc/publications/conferences/2007JaimeICC.pdf

Сообщение отредактировал Огурцов - Aug 17 2013, 06:49
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Aug 17 2013, 08:57
Сообщение #18


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



из BABS следует интересная вещь - если длина пакета не превышает 176 байт, при одном флаге, для кодирования достаточно одного дополнительного _бита_
понятно, что один бит вполне реально расположить где-то в заголовке, не прибегая к добавлению целого байта
кроме того, весьма красиво добавляется любое необходимое количество флагов
например, для двух флагов и одного дополнительного бита длина пакета может достигать 88 байтов
для трех флагов - 58 байт
для четырех - 43
во всех этих случаях длина пакета вполне достаточна для передачи по rs232
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Aug 18 2013, 07:30
Сообщение #19


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



есть ли какой быстрый способ разделить длинное число на 255 (или 254, 253...)
пока я нашел, что первый (младший) остаток от деления равен сумме всех байт

Go to the top of the page
 
+Quote Post
Огурцов
сообщение Aug 18 2013, 09:29
Сообщение #20


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Код
B = 256
N0 = X0*B^0 + X1*B^1 + X2*B^2 + X3*B^3
m0 = X0 + X1 + X2 + X3
M0 = m0 mod (B - 1)
C0 = (m0 - M0) / B

N1 = (N0 - M0) / (B - 1)

N1 = (X0*B^0 + X1*B^1 + X2*B^2 + X3*B^3 - M0) / (B - 1)
N1 = (X0*B^0 + X1*B^1 + X2*B^2 + X3*B^3 - M0) / B / ((B - 1) / B )
N1 = (X1*B^0 + X2*B^1 + X3*B^2 - C0) / ((B - 1) / B )
N1 = (X1*B^0 + X2*B^1 + X3*B^2 - C0) / (1 - 1 / B )
m1 = (X1 + X2 + X3 - C0) / (1 - 1 / B )

и т.д.

вот, вроде бы красиво, сложность линейна, но что бы такое сделать с (1 - 1 / В ) ?

Сообщение отредактировал Огурцов - Aug 18 2013, 09:37
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Aug 18 2013, 12:17
Сообщение #21


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



новый формат пакета c учетом предложений

CODE

// byte # 0
// 0.7 destination address presence
// 0.6 source address presence
// 0.5 stuff bit (babs) / stuff byte presence (cobs-r)
// 0.4 crc size.1
// 0.3 crc size.0
// 0.2 paket id.2
// 0.1 paket id.1
// 0.0 paket id.0

// [byte # 1]
// 1.7 destination address.7
// 1.6 destination address.6
// 1.5 destination address.5
// 1.4 destination address.4
// 1.3 destination address.3
// 1.2 destination address.2
// 1.1 destination address.1
// 1.0 destination address.0

// [byte # 2]
// 2.7 source address.7
// 2.6 source address.6
// 2.5 source address.5
// 2.4 source address.4
// 2.3 source address.3
// 2.2 source address.2
// 2.1 source address.1
// 2.0 source address.0

// byte # 3
// 3.7 command.7
// 3.6 command.6
// 3.5 command.5
// 3.4 command.4
// 3.3 command.3
// 3.2 command.2
// 3.1 command.1
// 3.0 command.0

// [byte # 4]

// 4.7 stuff byte.7
// 4.6 stuff byte.6
// 4.5 stuff byte.5
// 4.4 stuff byte.4
// 4.3 stuff byte.3
// 4.2 stuff byte.2
// 4.1 stuff byte.1
// 4.0 stuff byte.0

// byte # [5..n - 5]
// 5.7 data.7
// 5.6 data.6
// 5.5 data.5
// 5.4 data.4
// 5.3 data.3
// 5.2 data.2
// 5.1 data.1
// 5.0 data.0

// [byte # n - 4]
// n-4.7 crc31 stuff bit
// n-4.6 crc31.30
// n-4.5 crc31.29
// n-4.4 crc31.28
// n-4.3 crc31.27
// n-4.2 crc31.26
// n-4.1 crc31.25
// n-4.0 crc31.24

// [byte # n - 3]
// n-3.7 crc31.23
// n-3.6 crc31.22
// n-3.5 crc31.21
// n-3.4 crc31.20
// n-3.3 crc31.19
// n-3.2 crc31.18
// n-3.1 crc31.17
// n-3.0 crc31.16

// [byte # n - 2]
// n-2.7 crc31.15/crc15 stuff bit
// n-2.6 crc31.14/crc15.14
// n-2.5 crc31.13/crc15.13
// n-2.4 crc31.12/crc15.12
// n-2.3 crc31.11/crc15.11
// n-2.2 crc31.10/crc15.10
// n-2.1 crc31.9/crc15.9
// n-2.0 crc31.8/crc15.8

// [byte # n - 1]
// n-1.7 crc31.7/crc15.7/crc7 stuff bit
// n-1.6 crc31.6/crc15.6/crc7.6
// n-1.5 crc31.5/crc15.5/crc7.5
// n-1.4 crc31.4/crc15.4/crc7.4
// n-1.3 crc31.3/crc15.3/crc7.3
// n-1.2 crc31.2/crc15.2/crc7.2
// n-1.1 crc31.1/crc15.1/crc7.1
// n-1.0 crc31.0/crc15.0/crc7.0

// byte # n
// n.7 stop bit, 1
// n.6 stop bit, 1
// n.5 stop bit, 1
// n.4 stop bit, 1
// n.3 stop bit, 1
// n.2 stop bit, 1
// n.1 stop bit, 1
// n.0 stop bit, 1


минимальная длина пакета - 2 байта (заголовок и команда) + разделитель пакетов 1 или 2 байта, в зависимости от дуплекс/симплекс
адаптируется под:
безадресный режим
мастер-слейв
слейвы с прерываниями
каждый с каждым
произвольную длину данных
размер crc: crc0/crc7/15/31 бит
содержит номер пакета

как-то так
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Aug 19 2013, 19:34
Сообщение #22


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(Огурцов @ Aug 18 2013, 13:17) *
размер crc: crc0/crc7/15/31 бит

меня терзают смутные сомнения - не хорошо совсем без crc, какая бы команда не была
по сему оставлю crc7 и crc31 или скорее crc8 и crc32 со стаффингом crc в освободившийся бит
либо со стаффингом вместе с данными
первый способ несколько предпочтительнее, ибо дает возможность проверить пакет до распаковываия данных
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Aug 20 2013, 18:19
Сообщение #23


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



на 255 оказывается флетчер делил, искал остаток от деления
а вот частное, похоже, не искал (
к математикам чтоли сходить
Go to the top of the page
 
+Quote Post
Nixon
сообщение Aug 20 2013, 18:55
Сообщение #24


Гуру
******

Группа: Админы
Сообщений: 2 736
Регистрация: 17-06-04
Из: Киев
Пользователь №: 48



Вы бы написали что-то подобное статье - думаю многим было бы интересно. Потом и протокол в свою честь назвать бы могли sm.gif


--------------------
Вам помочь или не мешать?
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Aug 21 2013, 06:23
Сообщение #25


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(Nixon @ Aug 20 2013, 19:55) *
Вы бы написали что-то подобное статье - думаю многим было бы интересно. Потом и протокол в свою честь назвать бы могли sm.gif

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


Сообщение отредактировал Огурцов - Aug 21 2013, 06:25
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Aug 21 2013, 14:10
Сообщение #26


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



немного допиленный под этот формат список команд из позапрошлой жизни

CODE

#define Bus_resynch 0x00 // 0x00

// Bus_system_command
#define Bus_system_reset 0x10 // H 0x10 C R
#define Bus_system_start 0x11 // H 0x11 C R
#define Bus_system_config 0x12 // H 0x12 C R
#define Bus_system_wakeup 0x13 // H 0x13 C R
#define Bus_system_sleep 0x14 // H 0x14 C R
#define Bus_system_standby 0x15 // H 0x15 C R
#define Bus_system_set_time 0x16 // H 0x16 C-C-C-C T-T-T-T D-D-D-D C R
#define Bus_system_set_bitrate 0x17 // H 0x17 B-B-B-B C R
#define Bus_system_set_address 0x18 // H 0x18 U-U-U-U-U-U-U-U-U-U-U-U-U-U-U-U A C R
#define Bus_system_enumeration 0x19 // H 0x19 M-M-M-M-M-M-M-M-M-M-M-M-M-M-M-M C R

// Bus_pipe_command
#define Bus_pipe_a 0x1A // H 0x1A D..D C R
#define Bus_pipe_b 0x1B // H 0x1B D..D C R
#define Bus_pipe_c 0x1C // H 0x1C D..D C R
#define Bus_pipe_d 0x1D // H 0x1D D..D C R

// Bus_device_command
#define Bus_device_loopback 0x21 // H 0x21 A D..D C R
#define Bus_device_read_config 0x22 // H 0x22 A A-A-A-A C R
#define Bus_device_write_config 0x23 // H 0x23 A A-A-A-A D..D C R
#define Bus_device_simulate_flash 0x24 // H 0x24 A A-A-A-A D..D C R
#define Bus_device_write_flash 0x25 // H 0x25 A A-A-A-A D..D C R
#define Bus_device_check_flash 0x26 // H 0x26 A A-A-A-A D..D C R

#define Bus_user_command_mask 0x40
#define Bus_answer_mask 0x80

Go to the top of the page
 
+Quote Post
Огурцов
сообщение Aug 21 2013, 20:03
Сообщение #27


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



еще интересная фича по флетчеру - для получения остатка от деления на 255 массив можно складывать не только по байтам, но и словами, а только затем байтами

Go to the top of the page
 
+Quote Post
kolobok0
сообщение Aug 22 2013, 10:01
Сообщение #28


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(Огурцов @ Aug 22 2013, 00:03) *
...для получения остатка от деления на 255...


OFF:
При опросе различных датчиков, с АЦП и им подобных, рекомендую расчётную формулу умнажать на 56535 (слово), и затем смело "делить" методом отбрасывания двух байт. Собственно этот подход стар как мир МК.
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Aug 23 2013, 05:49
Сообщение #29


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



65535
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Aug 23 2013, 13:11
Сообщение #30


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(Огурцов @ Aug 23 2013, 09:49) *
65535


угумс. очепятался.
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 06:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01496 секунд с 7
ELECTRONIX ©2004-2016