TODOPIC
Otros Microcontroladores / Dispositivos programables => Microcontroladores ARM => Mensaje iniciado por: cevaztiam en 25 de Junio de 2013, 13:28:14
-
Hola Amigos,
a ver si me dan una mano con esto.
Necesito manejar el estado de las 32 salidas del micro JM60 por medio del modulo USB. Este paquete de 4 bytes los tengo que actualizar desde el host (pc) cada máximo 50us (20Khz) .
¿Alguna idea para orientarme?
¿Que tipo de clase de dispositivo USB me conviene usar?
Agradezco desde ya el que pueda aportar algo.
Saludos!
-
Hace rato que no toco el USB de algún freescale (lo último que toqué era un MCF51JM128... lindo bicho), pero la forma en que trabaja el USB 2.0 (Full Speed en el JM) no te permite más de 1000 frames por segundo, eso si, cada frame puede tener varios paquetes de 64 bytes (hasta 19 por frame llega, 1Mbyte por segundo aprox). Si querés que los datos salgan a 20Khz tenés que implementar un doble buffer en el micro (digamos 512+512 bytes) y que la PC los llene alternativamente. O más fácil aún, podés configurar varios endpoints (Ep0, Ep1, etc) y que el software de la PC te llene 64bytes de Ep0, luego de Ep1, Ep2 etc,etc y vuelva a Ep0 (y espere a que se libere), mientras sacas los datos del EP recientemente transferido a la velocidad que quieras (siempre menor a la velocidad de llenado).
Saludos
-
Hace rato que no toco el USB de algún freescale (lo último que toqué era un MCF51JM128... lindo bicho), pero la forma en que trabaja el USB 2.0 (Full Speed en el JM) no te permite más de 1000 frames por segundo, eso si, cada frame puede tener varios paquetes de 64 bytes (hasta 19 por frame llega, 1Mbyte por segundo aprox). Si querés que los datos salgan a 20Khz tenés que implementar un doble buffer en el micro (digamos 512+512 bytes) y que la PC los llene alternativamente. O más fácil aún, podés configurar varios endpoints (Ep0, Ep1, etc) y que el software de la PC te llene 64bytes de Ep0, luego de Ep1, Ep2 etc,etc y vuelva a Ep0 (y espere a que se libere), mientras sacas los datos del EP recientemente transferido a la velocidad que quieras (siempre menor a la velocidad de llenado).
Saludos
+1
-
Hace rato que no toco el USB de algún freescale (lo último que toqué era un MCF51JM128... lindo bicho), pero la forma en que trabaja el USB 2.0 (Full Speed en el JM) no te permite más de 1000 frames por segundo, eso si, cada frame puede tener varios paquetes de 64 bytes (hasta 19 por frame llega, 1Mbyte por segundo aprox). Si querés que los datos salgan a 20Khz tenés que implementar un doble buffer en el micro (digamos 512+512 bytes) y que la PC los llene alternativamente. O más fácil aún, podés configurar varios endpoints (Ep0, Ep1, etc) y que el software de la PC te llene 64bytes de Ep0, luego de Ep1, Ep2 etc,etc y vuelva a Ep0 (y espere a que se libere), mientras sacas los datos del EP recientemente transferido a la velocidad que quieras (siempre menor a la velocidad de llenado).
Saludos
Muchas Gracias por orientarme, con esto que comentaste hiciste que desempolve y comience de nuevo, ya que lo había abandonado la idea de usar una comunicación USB en mi proyecto ya que al leer la documentación me desanime por el tema de los frames (cada 1ms).
Aprovecho que ya laburaste con los módulos USB de freescale y me tomo el atrevimiento de hacerte algunas preguntas mas.
Es la primera vez que tengo un acercamiento con el protocolo USB
Protocolo. - ¿Que tipo de trasferencia debería usar para mi proyecto (bulk,iso,int) y que clase.
firm. - por el momento no me inicié en C para freescale sigo dándole con asm, estudié el proceso de enumeración para intentar realizar la rutina en ASM pero vi que muchos usan stack USB que tienen una gran parte resuelta, pero estos están en C.
¿que consejo me das?, es posible en ASM?
por ultimo, la aplicación de usuario tiene que correr en un debian (ahí me llevo mejor con C), para eso estaba armando una pequeña app en C+GTK. Para la comunicación con mi placa conviene escribir un modulo y laburar en espacio de kernel para que interactue con la app de usuario mejor o usar directamente libusb?
del lado PC tampoco nunca usé lib-usb, así que tengo que tendría que ponerme al día con esa librería,
Saludos.
-
Muchas Gracias por orientarme, con esto que comentaste hiciste que desempolve y comience de nuevo, ya que lo había abandonado la idea de usar una comunicación USB en mi proyecto ya que al leer la documentación me desanime por el tema de los frames (cada 1ms).
Aprovecho que ya laburaste con los módulos USB de freescale y me tomo el atrevimiento de hacerte algunas preguntas mas.
Es la primera vez que tengo un acercamiento con el protocolo USB
Protocolo. - ¿Que tipo de trasferencia debería usar para mi proyecto (bulk,iso,int) y que clase.
firm. - por el momento no me inicié en C para freescale sigo dándole con asm, estudié el proceso de enumeración para intentar realizar la rutina en ASM pero vi que muchos usan stack USB que tienen una gran parte resuelta, pero estos están en C.
¿que consejo me das?, es posible en ASM?
por ultimo, la aplicación de usuario tiene que correr en un debian (ahí me llevo mejor con C), para eso estaba armando una pequeña app en C+GTK. Para la comunicación con mi placa conviene escribir un modulo y laburar en espacio de kernel para que interactue con la app de usuario mejor o usar directamente libusb?
del lado PC tampoco nunca usé lib-usb, así que tengo que tendría que ponerme al día con esa librería,
Saludos.
En el 51JM128 usé bulk. En los 9S08JM había probado ejemplos pero todos basados en el stack CMX. Muy bonito todo pero en lo que se ha convertido ese stack sobrepasaba el tiempo que le podía dedicar (aparte que de todo lo que tenía yo sólo usaba un 1%).
Cuando pasé a un 51JM128, aproveché una nota de aplicación de un bootloader USB (no recuerdo el nro) que simula un dispositivo de almacenamiento masivo, (que le arrastrás el s19 y lo programa, realmente muy pero muy recomendable, muy entendible, y muy tuneable, y no pasa de 8K) y tomé algunas cositas como la enumeración y manejo de la BDT USB y terminé armando mi propio stack para comunicarme usando la dll Winusb en Windows (usando Delphi como lenguaje). En el micro usé lenguaje C, no creo que se justifique assembler (igual, hay partes de la enumeración que se tienen que hacer rápido, pero en C no habría problemas). En mi caso, en C logro transferencias de 1Mbyte escribiendo una pantalla LCD 320x240x16 en el micro vía USB, para más velocidad habría que ir a USB high speed que estos bichos no lo soportan.
Guarda que tengo entendido que los 9S08JM tenían una implementación medio probretona del USB.
-
Muchas Gracias por orientarme, con esto que comentaste hiciste que desempolve y comience de nuevo, ya que lo había abandonado la idea de usar una comunicación USB en mi proyecto ya que al leer la documentación me desanime por el tema de los frames (cada 1ms).
Aprovecho que ya laburaste con los módulos USB de freescale y me tomo el atrevimiento de hacerte algunas preguntas mas.
Es la primera vez que tengo un acercamiento con el protocolo USB
Protocolo. - ¿Que tipo de trasferencia debería usar para mi proyecto (bulk,iso,int) y que clase.
firm. - por el momento no me inicié en C para freescale sigo dándole con asm, estudié el proceso de enumeración para intentar realizar la rutina en ASM pero vi que muchos usan stack USB que tienen una gran parte resuelta, pero estos están en C.
¿que consejo me das?, es posible en ASM?
por ultimo, la aplicación de usuario tiene que correr en un debian (ahí me llevo mejor con C), para eso estaba armando una pequeña app en C+GTK. Para la comunicación con mi placa conviene escribir un modulo y laburar en espacio de kernel para que interactue con la app de usuario mejor o usar directamente libusb?
del lado PC tampoco nunca usé lib-usb, así que tengo que tendría que ponerme al día con esa librería,
Saludos.
En el 51JM128 usé bulk. En los 9S08JM había probado ejemplos pero todos basados en el stack CMX. Muy bonito todo pero en lo que se ha convertido ese stack sobrepasaba el tiempo que le podía dedicar (aparte que de todo lo que tenía yo sólo usaba un 1%).
Cuando pasé a un 51JM128, aproveché una nota de aplicación de un bootloader USB (no recuerdo el nro) que simula un dispositivo de almacenamiento masivo, (que le arrastrás el s19 y lo programa, realmente muy pero muy recomendable, muy entendible, y muy tuneable, y no pasa de 8K) y tomé algunas cositas como la enumeración y manejo de la BDT USB y terminé armando mi propio stack para comunicarme usando la dll Winusb en Windows (usando Delphi como lenguaje). En el micro usé lenguaje C, no creo que se justifique assembler (igual, hay partes de la enumeración que se tienen que hacer rápido, pero en C no habría problemas). En mi caso, en C logro transferencias de 1Mbyte escribiendo una pantalla LCD 320x240x16 en el micro vía USB, para más velocidad habría que ir a USB high speed que estos bichos no lo soportan.
Guarda que tengo entendido que los 9S08JM tenían una implementación medio probretona del USB.
Hola Amigos, disculpen el atrevimiento en este tema que tienen en discución, pero me dan la impresión de que tienen algo de dominio en el tema y tengo una duda que no he podido resolver. Lo que sucede es que precisamente yo estoy tratando de hechar a andar un proyecto con una DEMOJM usando el JM60, he realizado un ejemplo de aplicación con una interfaz grafica hecha en C#, este ejemplo es el que te da Freescale para arrancar este tipo deporyectos usando el Win XP...Ahora ya tienen un nueva libreria actualizada para aplicarla en Win 7. He tratado de realizar el mismo proyecto de prueba, pero no logra arrastrar la libreria a la barra de componentes el IDE de C#, que para mi caso estoy usando el Visual Studio Express C# 2010. Alguno de ustedes ya se a topado con la solución a este problema. O de que manera es que ustedes hacen aplicaciones en Win 7, para hacer retroalimentación eon el JM60? De antemano les agradesco cualquier comentario u orientación al respecto..gracias..!