AJUDA DMA.

Software e Hardware para linha ARM

Moderadores: 51, guest2003, Renie, gpenga

AJUDA DMA.

Mensagempor fabim » 13 Mai 2010 17:50

Pessoal.
Estou iniciando um projetinho por hoby, pós o putex ter me indicado um equipamentinho muito util.

http://www.sparkfun.com/commerce/produc ... ts_id=8938

Parte do PC, moleza.
O problema é o seguinte. Os CM3 da nxp, eu não consegui achar em lugar algum do user manual, informando qual a velocidade, ou se existe algum timer que controle o tempo de transferencia de dados.
No caso, vai ser HW TO RAM.
ou seja, aponto o endereço lo-hi-hig-ou highest da porta.
E vou fazendo a fifo de 256 em 256 bytes.

A unica coisa que estou muito confuso é velocidade do DMA.

Alguem ja mexeu, ou tem alguma outra dica?
Pretendo fazer algo pra poder vender com um custo bem baixo pro pessoal.

Abraços

Fabim
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 guest2003 » 13 Mai 2010 18:36

Fabim,

Tem que usar FPGA ou pelo menos CPLD, pra fazer o trigger... senao o analizador não vai servir pra muita coisa nao.

O pessoal usa FIFO de alta velocidade pra capturar os dados e tals...

Bom nao sei qual a sua ideia de velocidade de captura.

[]'s
http://www.sethi.com.br (Institucional)
http://www.sethi3d.com.br (Impressoras 3d)
http://www.sethi.com.br/blog (Blog Impressoras 3d)
Avatar do usuário
guest2003
Word
 
Mensagens: 746
Registrado em: 13 Out 2006 11:48
Localização: Campinas - SP

Mensagempor fabim » 13 Mai 2010 19:21

20mhz +/-..

tipo 32K interno no LPC rodando a 114mhz.
Vou pegar 8 em 8 bits, jogar na ram, que é rapido pra capeta.

No meu caso, só precisava saber sobre velocidade. só isso.

Vai ficar uma tetéia.
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 tcpipchip » 14 Mai 2010 00:21

O prize de 2008 do STM32 tem o ECG que trabalha por DMA, baseado no ARM7...veja lá...DMA da RAM para USB...funciona bem!
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Mensagempor albertorcneto » 14 Mai 2010 04:30

Miguel,

"Bosta" o link pra gente ai fazendo o favor. Tenho um problema parecido mas nao consegui googlear.
"Nothing travels faster than the speed of light, with the possible exception of bad news, which obeys its own set of laws" ~ Douglas Adams
albertorcneto
Byte
 
Mensagens: 269
Registrado em: 28 Mar 2007 14:08

Mensagempor guest2003 » 14 Mai 2010 05:16

Fabim,

Volto a insistir... de uma lida sobre Logic Analyser antes...

Agora se for so pra brincar tudo bem, capturar os sinais digitais e pronto, ok!

Mas para ser util tem que ter trigger, tem que ter pre/pós trigger, etc

[]'s
http://www.sethi.com.br (Institucional)
http://www.sethi3d.com.br (Impressoras 3d)
http://www.sethi.com.br/blog (Blog Impressoras 3d)
Avatar do usuário
guest2003
Word
 
Mensagens: 746
Registrado em: 13 Out 2006 11:48
Localização: Campinas - SP

Mensagempor fabim » 14 Mai 2010 08:22

guest2003 escreveu:Fabim,

Volto a insistir... de uma lida sobre Logic Analyser antes...

Agora se for so pra brincar tudo bem, capturar os sinais digitais e pronto, ok!

Mas para ser util tem que ter trigger, tem que ter pre/pós trigger, etc

[]'s


Sim guest.
Niveis digitais equivalem a niveis de sinal TTL.
Nivel ditigal baixo = 5/3< = 0
nivel digital alto = 2*(5/3)> = 1

Ou seja, quando falamos em digital. Falamos em niveis lógicos de tensão de trabalho de sinais.
Agora, veja. SE com este analizador eu consigo ver a SPI e a I2C de um uC que trabalha com 3.3V. Quer dizer que ja fugiu o escopo. pois a tensão onde deveria ser o trigger esta a baixo de 5/3~....

Eu conhecendo o tempo entre amostras, e que preencheu um buffer.
Através de analize de uma analize de canvas, eu consigo saber qual o tempo que ficou em 1, e caso o tempo em 0 antes do proximo 1, seja igual ao tempoem 1 +/- 2%. Então sei que a frequencia seria simetrica, e não um pwm com Ton variada.
Se for uma analize de SPI, eu utilizaria duas linhas em canvas!!!!! e etc.

Tendeu ?

Eu conheço muito bem o sistema de captura de sinais digitais.
Simplesmente em base de nivel e tempo.
Lógico e ja um pré conceito de como é o protocolo eletrico de cada um.

Mesmo assim, agradeço pela ajuda tchelo.
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 » 14 Mai 2010 09:04

pelo que entendi vc quer apenas fazer um analisador logico, como o mostrado no site... obviamente para fazer pre-trigger, post-trigger, etc vc tem que capturar continuamente em um buffer, formando uma janela que vc envia para o PC ou nao conforme a configuracao do trigger.

o pulo do gato daih eh conseguir configurar um timer periodico para gerar uma transferencia de DMA. em processadores mais modernos os timers jah sao encadeados com o controlador de DMA, de modo que vc consegue programar esse tipo de transferencia periodica de forma simples. nos menos avancados pode ser necessario conectar a saida externa do timer em uma entrada de requisicao de DMA e nos mais fraquinhos simplesmente nao eh possivel. outro lance importante eh trabalhar com um ring-buffer, o que permite vc processar um buffer enquanto outro esta sendo recebido em paralelo, permitindo transferencia continua sem gaps. mas daih vc precisa de um DMA com funcionalidade scatter/gather.

soh nao entendi sua observacao sobre o nivel do trigger... como eh um analisador logico, supostamente ele soh trabalha com sinais digitais, sendo que 3.3V eh perfeitamente compativel com 5V e vice-versa. o que ocorre eh algumas tecnologias de 3.3V nao aceitarem tensoes maiores, torrando com 5V aplicados na porta...

na duvida basta colocar um 74LCX244 para funcionar como fusivel entre seu microcontrolador de 3.3V e a logica externa! :)

ah sim, uma coisa que facilitaria bastante nos analisadores logicos seria uma entrada de clock indo para um DPLL de alta velocidade para gerar um clock decente. por exemplo, vc vai amostrar sinais logicos de um sistema com bus de 44MHz... mas o clock de referencia do seu sistema eh 90MHz e vc consegue amostrar 2 ou 3x cada transicao do bus e fica uma m****. injetando o clock de 44MHz no DPLL, vc multiplica e gera um 88MHz para alimentar o seu sistema e assim faz exatamente 2 amostras para cada transicao de bus, ficando tudo certinho! :)
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor denis » 14 Mai 2010 10:02

Fabim,

Já ouvi dizer que Analisadores podem ser feitos assim:

Liga o seu barramento a ser analisado direto no barramento de dados de uma memória RAM (externa), ai sei micro vai clockando essa memória. Depois que você fez a amostra faz um dump da memória e envia os dados para o PC. Sabendo o tempo das amostras e o nível lógico o resto é com o software do PC.

Mais isso é bem básico, nem imagino os problemas que podem surgir, niveis lógicos e etc.


Abs,
Denis
denis
Byte
 
Mensagens: 257
Registrado em: 06 Mar 2007 12:29
Localização: Americana - SP

Mensagempor guest2003 » 14 Mai 2010 19:25

Bom Fabim,

Acho que vc nao entendeu meu post :)

Mas o Marcelo entendeu... da uma lida no que ele disse...

Trigger nao tem nada haver com niveis de tensao, e sim com o momento que vc vai começar a capturar seu sinal...

Tipo voce quer comecar a capturar o barramento quando o processador escrever 0xA5 ... e vamos supor que o WR eh em 0....

Ai seu Trigger seria 0xA5 no barramento + borda de descida no WR...

Volto a dizer, da uma lida sobre logic analyser.

Sobre o nivel, normalmente ele eh ajustavel e o pessoal chama de logic threshold...

Eh o nivel que ele entende como 0 abaixo dele e como 1 acima dele... é ajustavel.

[]'s
http://www.sethi.com.br (Institucional)
http://www.sethi3d.com.br (Impressoras 3d)
http://www.sethi.com.br/blog (Blog Impressoras 3d)
Avatar do usuário
guest2003
Word
 
Mensagens: 746
Registrado em: 13 Out 2006 11:48
Localização: Campinas - SP

Mensagempor rafael.wachter » 14 Mai 2010 20:41

Em questão de niveis diferentes de tensão pode se usar um
Dual-Supply Bus Transceiver
http://focus.ti.com/docs/prod/folders/print/sn74lvc8t245.html
trabalha de 1,65V até 5,5V

VCCA -> mesmo nivel de tensão do ARM, FPGA, etc.
VCCB -> nivel de tensão do circuito a ser analisado
Avatar do usuário
rafael.wachter
Nibble
 
Mensagens: 89
Registrado em: 19 Nov 2008 13:12
Localização: no RS tchê

Mensagempor msamsoniuk » 14 Mai 2010 22:01

mas eh como vc disse... uma FPGA eh a melhor jogada!

os pinos dela vao poder operar com clock bastante elevado e vc pode reduzir a banda facilmente paralelizando sinais. por exemplo, vc pode ter 8x entradas de 100MHz, paralelizar e empacotar isso como 32 bits a uma cadencia mais gerenciavel de 25MHz. e com o mesmo consumo de banda vc poderia trabalhar com sinais diferenciais a 800MHz.

no caso do processador nao ser tao forte, a FPGA ainda teria o bonus de funcionar como FIFO, podendo fazer capturas de alguns KB em FIFOs capazes de operar a mais de 200MHz. e claro, do ponto de vista de trigger nem se fala: uma FPGA pode reconhecer patterns em linhas paralelas ou seriais em tempo real! :)

outra coisa q seria legal em um equipamento desse tipo eh interface de comunicacao com o usuario padrao ethernet, de preferencia hospedado em um microcontrolador minimamente decente, com fast-ethernet e uns 16MB de ram para rodar um uclinux com um cliente X capaz de plotar as formas de onda via rede em qq computador com X! :)

guest2003 escreveu:Bom Fabim,

Acho que vc nao entendeu meu post :)

Mas o Marcelo entendeu... da uma lida no que ele disse...

Trigger nao tem nada haver com niveis de tensao, e sim com o momento que vc vai começar a capturar seu sinal...

Tipo voce quer comecar a capturar o barramento quando o processador escrever 0xA5 ... e vamos supor que o WR eh em 0....

Ai seu Trigger seria 0xA5 no barramento + borda de descida no WR...

Volto a dizer, da uma lida sobre logic analyser.

Sobre o nivel, normalmente ele eh ajustavel e o pessoal chama de logic threshold...

Eh o nivel que ele entende como 0 abaixo dele e como 1 acima dele... é ajustavel.

[]'s
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor mastk » 14 Mai 2010 22:19

Analisadores logicos sao uma maravilha, tal como o guest disse, o que faz dele realmente util eh quao flexivel eh o trigger, em funcao de valor no bus, em funcao de tempo minimo, maximo, eventos etc.
O que vim utilizando, chega me deu vontade de chorar tao F***** que eh, mas o grande problema dele era a falta de RAM, se for fazer um, sugiro que coloque uns 256 megas de fifo.
Avatar do usuário
mastk
Dword
 
Mensagens: 4407
Registrado em: 14 Out 2006 20:43

Mensagempor fabim » 15 Mai 2010 01:23

256 MEGA DE RAM. uiiiiiiiiii, até pela ethernet demos alguns segundinhos longos... heheheh

Tchelo, tendi o prato de triggo pra tres tigres tristes!!!!

o putex me mandou a %$@#!$%! e fez uma colocação mais mal educada sobre o que estava dizendo ai eu entendi...

O trigger é um evendo.. caso contrario, não seria capaz de ver as formas de onda.
Exemplo, houve o evento....

Desce o burrai e pega os N K de buffer em paralelismo..
Joga pro PC, ai ele plota o negocio, e faz o estudo........

Isso é simples, e sem nenhum problema de implementação..

Agora falando sério, to pensando no que o samsonite disse do ethernet..

No bulk da usb, não passa nem FU%# de 1.5MB, isso na melhor das possibilidades...

Agora eu pensei em algo muito legal...

Tem o chipo que o putex me ensinou a trabalhar que é o wiz..
Ele works em 100Mbps.

eu pego o DMA do arm, pra enxer uns 56KB interno.
Isto compreende 7 frames de 8Kbytes.

Ao invés de fazer via TCP. Eu faço um SERVIDOR de recepção UPD. Isto para receber os buffers, que UPD é muiiiiiiiito mais rapido que TCP, e o cabo é P2P, ou seja latencia "0"...

E faço um cliente TCP para poder conversar com o arm, somente em configurações.
Velocidade, ou algo a parte tipo um voltimetro analogico ou sei lá o que..

Cara, isso é uma mão na roda, barato e que serve pra mei mundo de nego que se mata.

muiiito bom...

Só que deve ser low cost. ou seja FPGA nem F%#%#$%..

To falando de um ARM um wizz, e mais meia duza de componentes..

E vamos continuar a amadurecer as idéias.... esse eu acho que sai..

Vou dar uma amadurecida e pesquisar um CM3 ou superior que tenha barramento de ram externa. Low cost e que exista no brasil.

Abraços
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 » 15 Mai 2010 02:47

ethernet eh 1000x melhor que usb e muito mais facil de trabalhar! :)

com essa memoria que vc falou eh facil montar um buffer de 32 frames de 1472 bytes, q eh o q sobra se contar o MTU maximo de 1500 bytes e tirar os 20 bytes do header ip e os 8 do header udp. uma jogada que acelera bastante eh fazer o buffer de aquisicao casar com o buffer de transmissao, tipo:

Código: Selecionar todos
struct {
  unsigned state;
  struct mac_h mac;
  struct ip_h ip;
  struct udp_h udp;
  char data[1472];
} buffer[32];


daih se vc tiver DMA com funcionalidade scatter-gather para a aquisicao de dados, vc programa os buffer[i].data de 0 a 31 como buffers de aquisicao, daih o DMA vai automaticamente preencher as areas data[] de cada frame. se vc quiser enviar um deles, eh soh colocar o ponteiro do buffer[i] recem adquirido no ring-buffer de transmissao da ethernet. de fato, se a aquisicao for numa taxa de uns 10MB/s e a ethernet for full-duplex a 100Mbps sem outros dispositivos comendo banda na mesma rede, acho que eh possivel continuamente transmitir sem perder frames.

para cadencias altas, acho que vc vai ter q capturar continuamente em alta velocidade e, recebendo o trigger capturar ateh o fim da janela e parar completamente a aquisicao, para poder entao transmitir. o bom eh capacidade de capturar acima de 10MB/s, o ruim eh que enquanto esta transmitindo a janela vc perde eventos.

se vc quiser ter mais funcionalidade ip, vc pode reservar tambem um segundo conjunto de buffers para mensagens de gerenciamento, mas daih com um data muito menor (sei lah qual eh o tamanho bom, talvez uns 150 bytes), de modo a usar parte no ring-buffer de RX, parte para eventuais respostas de TX.

assim vc pode controlar o sistema tambem via ethernet! :)
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Próximo

Voltar para ARM

Quem está online

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

x