CRC

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Mensagempor fabim » 05 Mai 2010 10:13

verd escreveu:Olá Beto! cara descobri o que estava cagando o meu crc! eu pensava que o crc era calculado em cima do pacote inteiro, descobri que tem que calcular o crc de cada bit do pacote que estou enviando!


sei, e como se calcula o CRC de 1 bit ? hehehe
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor msamsoniuk » 05 Mai 2010 13:50

acho que ele queria dizer bit a bit ao inves de byte a byte... digo isso pq tive uma dificuldade no CRC para HDLC... fazendo bit a bit consegui garantir que ele passava o fluxo de bits no polinomio na ordem correta (LSB first) e simplificava o circuito... rodando em paralelo byte a byte o negocio complicava um monte e nao dava certo nunca... obvio, se der uma estudada a fundo, vc consegue transpor o algoritmo bit a bit para trabalhar byte a byte e sem duvida fica muito melhor quando se trabalha com taxas de transferencias altas.

fabim escreveu:
verd escreveu:Olá Beto! cara descobri o que estava cagando o meu crc! eu pensava que o crc era calculado em cima do pacote inteiro, descobri que tem que calcular o crc de cada bit do pacote que estou enviando!


sei, e como se calcula o CRC de 1 bit ? hehehe
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor verd » 05 Mai 2010 14:02

assim!!
Código: Selecionar todos
unsigned getcrc( unsigned crc, char c)
{
crc = 0xff;
c = 0xff;
int i;
crc ^= (c & 0xff);
 for (i = 0; i < 8; ++i) {
    if (crc & 1) crc = (crc >> 1) ^ 0xA001;
    else crc = (crc >> 1);
  }
  return crc


utilizo esta função de crc, ai envio por exemplo o esndeço 0x01 e passo pela minha função de crc, envio o serviço 0x03 e passo pela minha função crc e assim por diante no final envio o calculo do crc Lo depois o Hi, assim eu não utilizo tabelas! manjas!
"Tem pessoas qua acham que sabem tudo....
eu já acho que não sei nada!!!"
verd
Byte
 
Mensagens: 262
Registrado em: 28 Ago 2008 10:15

Mensagempor fabim » 05 Mai 2010 14:15

Marcelo Samsoniuk escreveu:acho que ele queria dizer bit a bit ao inves de byte a byte... digo isso pq tive uma dificuldade no CRC para HDLC... fazendo bit a bit consegui garantir que ele passava o fluxo de bits no polinomio na ordem correta (LSB first) e simplificava o circuito... rodando em paralelo byte a byte o negocio complicava um monte e nao dava certo nunca... obvio, se der uma estudada a fundo, vc consegue transpor o algoritmo bit a bit para trabalhar byte a byte e sem duvida fica muito melhor quando se trabalha com taxas de transferencias altas.

fabim escreveu:
verd escreveu:Olá Beto! cara descobri o que estava cagando o meu crc! eu pensava que o crc era calculado em cima do pacote inteiro, descobri que tem que calcular o crc de cada bit do pacote que estou enviando!


sei, e como se calcula o CRC de 1 bit ? hehehe


hehehehe, vou fazer de conta que não li o que escreveu....
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor verd » 05 Mai 2010 14:48

o importante é que você entendeu o que eu quis dizer! hehehe
"Tem pessoas qua acham que sabem tudo....
eu já acho que não sei nada!!!"
verd
Byte
 
Mensagens: 262
Registrado em: 28 Ago 2008 10:15

Mensagempor msamsoniuk » 05 Mai 2010 16:49

imaginei que vc estava falando na implementacao serial vs paralela do CRC... dah uma ollhada nesse pdf aqui, na pagina 3 e 4 tem a comparacao do CRC-16 nas duas formas:

http://ishaksuleiman.tripod.com/00000.pdf

porem a implementacao da pagina 4 possui um erro. ela usa como entrada algumas saidas e isso nao eh possivel, pq os tempos de propagacao sao implevisiveis e isso altera os resultados. a solucao seria colocar alguns flip-flops em pontos estrategicos, mas os clocks adicionais criariam um efeito pipeline que precisaria ser compensado e tornaria a implementacao muito complexa.

assim, a implementacao serial acabou ficando mais pratica para o que eu queria... mas vou ter q dar um jeito de fazer uma implementacao paralela funcionar para usar em um controlador ethernet na FPGA! :P

fabim escreveu:
Marcelo Samsoniuk escreveu:acho que ele queria dizer bit a bit ao inves de byte a byte... digo isso pq tive uma dificuldade no CRC para HDLC... fazendo bit a bit consegui garantir que ele passava o fluxo de bits no polinomio na ordem correta (LSB first) e simplificava o circuito... rodando em paralelo byte a byte o negocio complicava um monte e nao dava certo nunca... obvio, se der uma estudada a fundo, vc consegue transpor o algoritmo bit a bit para trabalhar byte a byte e sem duvida fica muito melhor quando se trabalha com taxas de transferencias altas.

fabim escreveu:
verd escreveu:Olá Beto! cara descobri o que estava cagando o meu crc! eu pensava que o crc era calculado em cima do pacote inteiro, descobri que tem que calcular o crc de cada bit do pacote que estou enviando!


sei, e como se calcula o CRC de 1 bit ? hehehe


hehehehe, vou fazer de conta que não li o que escreveu....
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor fabim » 05 Mai 2010 17:02

odeio CRC!!!!!!!
E o meu controlador ethernet não preciso saber nada de CRC, ele ja tem interno hehehe WIZ5100...... hehehehe
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor verd » 05 Mai 2010 17:02

Valeu pela atenção e pelo material Marcelo Sam!! estou implementando um modbus pela 232! estava dando erro de crc agora consegui fazer funcionar!!

brigadão!!
"Tem pessoas qua acham que sabem tudo....
eu já acho que não sei nada!!!"
verd
Byte
 
Mensagens: 262
Registrado em: 28 Ago 2008 10:15

Mensagempor Beto_s » 05 Mai 2010 17:59

Obtenho Crc+Crc- por tabela e até agora não tive problema.
Modbus (algumas funçoes) RTU 9600 bps ,16f877A em 10Mhz.
Caso precise , tá a disposição.

Beto.
Beto_s
Bit
 
Mensagens: 43
Registrado em: 06 Set 2007 23:36

Mensagempor verd » 05 Mai 2010 22:57

valeu beto!! eu estava tentando montar utilizando as tabelas mas não estava conseguindo!! mas a funçãozinha funciona legal tbm!! consegui fazer funcionar!! eu não estava entendendo como montar o protocolo em cima do crc!! estou implementando na minha estação meteorológica para conversar com o clp!!!
Precisando, estamos ae tbm! Valeu!
"Tem pessoas qua acham que sabem tudo....
eu já acho que não sei nada!!!"
verd
Byte
 
Mensagens: 262
Registrado em: 28 Ago 2008 10:15

Mensagempor KrafT » 06 Mai 2010 08:55

Para situações especiais, diria extremas, sempre tem os chips da Zilog que ja incluem tratamento de alguns tipos de CRC.

http://www.zilog.com/index.php?option=c ... ent_id=139
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Mensagempor msamsoniuk » 06 Mai 2010 14:06

estes controladores da zilog era muito influentes na decada de 80, mas na decada de 90 foram quase que totalmente substituidos por implementacoes mais avancadas da motorola e hitachi, que integravam controladores de DMA junto as SCCs e conseguiam assim maior performance.

hoje em dia ninguem fala muito em HDLC e a tendencia, quando se precisa disso, eh migrar para FPGA. eu fiz uma migracao destas no comeco do ano e a performance estimada da minha implementacao em verilog foi de 70 Mbit/s! :)

KrafT escreveu:Para situações especiais, diria extremas, sempre tem os chips da Zilog que ja incluem tratamento de alguns tipos de CRC.

http://www.zilog.com/index.php?option=c ... ent_id=139
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor KrafT » 06 Mai 2010 15:10

Acho que estou ultrapassado.
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Anterior

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x