Surgió una necesidad inesperada en mi diseño, que es controlar 2 dispositivos SPI esclavos simultáneamente. Al principio, por supuesto, estaba planeando usar el bus SPI como de costumbre y controlar ambos dispositivos usando los pines /CS para que todo pareciera estar bien.
Al revisar la hoja de datos del dispositivo A hoy, noté que espera todos los datos de una sola vez, lo que significa que no puedo realizar el procedimiento que había planeado originalmente:
1) Seleccionar dispositivo B 2) Leer datos de B 3) Deseleccionar dispositivo B 4) Seleccionar dispositivo A 5) Escribir datos de B 6) Deseleccionar dispositivo A 7) Repetir hasta que todos los datos de B vayan a A (alrededor de 1,1 Mbit)
El dispositivo A asume que cuando su /CS sube, es el final del flujo de datos. Por supuesto, no puedo leer todo desde B en una sola ejecución y almacenarlos en MCU RAM, ya que los datos son mucho más grandes.
Naturalmente, lo siguiente que me vino a la mente es usar 2 SPI maestros separados al mismo tiempo: seleccione ambos chips, lea el byte de B y aliméntelo inmediatamente a A.
Entonces mis preguntas son:
a) ¿Es eso posible usando un ATmega32u4? Tiene un papel fundamental en el diseño general y cambiar a otro MCU sería un paso atrás.
b) Leí que el USART puede actuar como un segundo maestro SPI. ¿Es eso viable y confiable? ¿Qué tan difícil es implementar?
c) Si, lamentablemente, no es posible y tengo que cambiar de MCU, ¿cuál me recomendaría? Tenga en cuenta que la capacidad USB de ATmega32U4 es esencial.
d) ¿Es probable que el nuevo proceso (leer de B, alimentar a A) cause algún comportamiento inesperado? No parece bajo mi punto de vista, pregunto por si acaso ya que soy nuevo ingeniero.
¡Cualquier otra idea o dirección es bienvenida! Gracias de antemano.
ACTUALIZAR En caso de que juegue un papel importante, el Dispositivo A es un FPGA mientras que B es una memoria flash. La MCU tiene una doble función: descargar el flujo de bits de la PC a través de USB y almacenarlo en la ROM flash / usar el flujo de bits almacenado para configurar el FPGA al reiniciar/encender. Tanto FPGA como flash usan SPI. De acuerdo con la hoja de datos de la FPGA (familia ice40, Lattice, " Programación y configuración de iCE40 " p.26), la imagen debe programarse sin interrupción.
Es posible que desee adoptar un enfoque completamente diferente. En lugar de conectar la PROM y la FPGA al µC como dispositivos esclavos, conecte la PROM directamente a la FPGA y permita que la FPGA arranque en modo maestro SPI en lugar de modo esclavo SPI. Bonificación: el arranque ocurrirá más rápido.
Todavía podrá acceder a la PROM desde el µC después de que la FPGA haya arrancado para actualizaciones de firmware o almacenamiento de datos, pasando las señales de la interfaz SPI de la µC a través de la lógica de la FPGA.
a) Afaik, el Atmega tiene solo 1 bus SPI.
b) Sin experiencia (pero soy novato)
c) Uso principalmente STM#2. Estos tienen 2 buses SPI y si necesita más, hay una versión que tiene 3 (o incluso más posiblemente). El más barato (cuesta menos que un Arduino) STM32F103C8T6 tiene 2 buses SPI.
d) Los buses SPI en el STM32 (y probablemente otros UC) son independientes, por lo que no debería haber ningún problema con el proceso. Sin embargo, dado que STM32 tiene DMA, es posible que pueda hacerlo 'directamente', es decir, enviar datos SPI entrantes inmediatamente al SPI saliente.
Usted afirma que el FPGA asume el final de los datos de configuración cuando se anula la afirmación de CS. ¿Hay un tiempo de espera también? Es decir, si puede tener un retraso indefinido mientras deja CS activo, ¿el dispositivo se comportará correctamente?
Si simplemente hay una necesidad de evitar que el dispositivo FPGA cierre la transacción, entonces el problema se puede simplificar como uno de mantener CS seleccionado sin permitir que los comandos al flash se lean como datos basura. Para esto, un segundo maestro SPI puede ser excesivo
Sugeriría usar un dispositivo de búfer entre MCU y FPGA para la línea MISO
, MOSI
y SCLK
, y usarlo para deshabilitar las señales SPI usando el pin de reinicio/habilitación en el dispositivo de búfer.
La transacción se vería como
USART como maestro SPI
Como dice la hoja de datos en el capítulo 19,
El receptor y transmisor serial síncrono y asíncrono universal (USART) se puede configurar en un modo de operación maestro compatible con SPI.
Entonces puede tener dos puertos SPI (maestros) independientes para transferir datos entre los esclavos.
Uso de una EEPROM externa I 2 C
En lugar de un flash SPI, puede conectar una EEPROM I 2 C al puerto TWI (PD0, PD1) en la MCU. I 2 C se llama TWI o interfaz serial de 2 hilos en Atmel-ese, pero son esencialmente lo mismo. Inconveniente: Las EEPROM son generalmente más caras que las memorias flash.
turbo j
Pham largo
manos
CapnJJ
manos
manos
CapnJJ
manos