Cómo conectar el búfer SN74 con el microcontrolador a otro bus de datos

0

Espero conectar un microcontrolador de 3.3V ARM M4 a un bus de datos ya establecido de 5V, y hacer que responda a interrupciones para leer datos del bus o escribir datos en el bus. El bus de datos se encuentra entre una CPU de 5 V (m68000) y un flash de 3,3 V. Para hacer esto de manera segura, estoy planeando usar SN74LVCH16245As para traducir entre 5V y 3.3V.

El sistema ya tiene 3 líneas de control que son útiles.
1) Uno es bajado cuando necesita leer / escribir en flash.
2) Otro problema es bajo cuando se necesita leer / escribir en el sistema ARM. Estoy tratando de establecer una interfaz con el bus de datos.
3) Y finalmente otra línea de control para determinar si está leyendo (5V) o escribiendo (0V).

Mi plan es que las líneas de datos de la CPU pasen de un SN74LVCH16245A al flash, con habilitación de salida (OE) en el SN74LVCH16245A conectada a la primera línea de control. Sin embargo, antes de que las líneas de datos se conecten a ese SN74LVCH16245A, se dividen con las vías a otro SN74LVCH16245A que luego se conecta a los pines ARM GPIO, con la segunda línea de control como habilitación de salida para ese SN74LVCH16245A.

Me gusta esto:

FLASH ----- ------- ARM
|

SN74LVCH16245A SN74LVCH16245A
|

-------------------


CPU

Eso significa que solo un SN74LVCH16245A debe tener activado el pin de habilitación de salida al mismo tiempo. Por lo tanto, el bus de datos solo es usado por el flash o el chip de brazo al mismo tiempo. Este debería resolver la contención del bus.

Mi problema está en el lado ARM, y cómo debo configurar los pines GPIO para entradas y salidas. Digamos que una interrupción llega desde el sistema y quiere LEER un byte al chip ARM. La interrupción llegará, la ARM establecerá sus pines para que sean SALIDAS, y luego puedo configurar los datos en los pines y terminar la interrupción. El ARM mantendrá esos pines en SALIDA hasta que se le indique lo contrario. Pero, ¿y si la siguiente interrupción es un comando ESCRIBIR? El SN74LVCH16245A cambiará de dirección, y el lado del SN74LVCH16245A que se conecta a la ARM será SALIDA, pero la ARM todavía tendrá sus pines GPIO configurados en SALIDA. Eso sería un problema, ¿no?

Mirando la documentación técnica para el chip ARM, toma 10 ciclos antes de que el chip ARM inicie la primera línea de su código de interrupción, si no usa la unidad de punto flotante. A 120MHz, eso es 83 nano segundos. Por lo tanto, no podré cambiar los pines GPIO a ENTRADAS durante al menos 95 nano segundos o menos. ¿Esto no causará daño al ARM o al SN74LVCH16245A? Si esto es eléctricamente correcto tener la salida del SN74LVCH16245A frente a las SALIDAS de la ARM (y viceversa, las ENTRADAS del SN74LVCH16245A frente a las ENTRADAS de la ARM en la situación inversa), entonces, excelente, pero quiero confirmar con gente más informada que yo primero antes de burlarme de mi primer PCB.

Si eso no es eléctricamente correcto, tuve otra idea de cómo posiblemente conectar el chip ARM al bus de datos: tener una mitad de 8 bits del SN74LVCH16245A conectado a los pines de la ARM que siempre están configurados como ENTRADAS, y los otros 8 bits la mitad del SN74LVCH16245A se conectó a diferentes pines en el chip ARM como SALIDAS, y en base a la interrupción puedo mirar el pin de lectura / escritura y determinar qué quiere que haga la interrupción, ya sea leer desde las primeras 8 líneas o escribir al Segundo conjunto de 8 líneas. Las habilitaciones de salida del SN74LVCH16245A se establecerían utilizando la segunda línea de control mencionada anteriormente, ANDed con la línea de control de lectura / escritura, o ANDed con la inversa de la línea de lectura / escritura, respectivamente.

Si pudiera resolver este problema de una manera mucho mejor, realmente espero saber de usted lo que podría hacer mejor. ¿Hay un dispositivo más adecuado para lo que estoy haciendo que el SN74LVCH16245A? Soy un principiante en electrónica, pero he estado pensando en esto durante mucho tiempo y me di cuenta de que realmente necesito pedir consejos en lugar de solo reflexionar sobre ello en mi cabeza todos los días.

Gracias a todos.

    
pregunta Alister Smith

1 respuesta

1
  

La interrupción llegará, la ARM establecerá que los pines sean SALIDAS, y luego puedo configurar los datos en los pines y terminar la interrupción. El ARM mantendrá esos pines en SALIDA hasta que se le indique lo contrario. Pero, ¿y si la siguiente interrupción es un comando ESCRIBIR?

Debería hacer que el uC devuelva sus pines GPIO al modo de entrada una vez que finalice la transacción de lectura.

Debería saber qué tan rápido puede hacer esto, y su protocolo debe requerir que no se permita ninguna otra transacción hasta que esto suceda.

  

tener una mitad de 8 bits del SN74LVCH16245A conectado a los pines del ARM que siempre están configurados como ENTRADAS, y la otra mitad de 8 bits del SN74LVCH16245A conectado a diferentes pines en el chip ARM como SALIDAS, y en función de la interrupción puedo mirar en el pin de lectura / escritura y determine lo que la interrupción quiere que haga, lea desde las primeras 8 líneas o escriba al segundo conjunto de 8 líneas.

Si tiene suficientes GPIOs de repuesto en la unidad de control y necesita más velocidad de la que puede obtener con el método anterior, esto podría funcionar.

  

Si pudiera resolver este problema de una manera mucho mejor, realmente espero saber de usted lo que podría hacer mejor. ¿Hay un dispositivo más adecuado para lo que estoy haciendo que el SN74LVCH16245A?

El problema con el que te encuentras es que tu uC (como la mayoría) no está diseñada para funcionar como esclavo en una interfaz paralela. Puede manipularlo con interrupciones como usted propone, pero nunca será tan rápido como un dispositivo con una interfaz paralela de hardware dedicado.

Los dispositivos como los FPGA, los CPLD y las memorias son tipos de chips que, por lo general, pueden proporcionar interfaces esclavas paralelas rápidas.

    
respondido por el The Photon

Lea otras preguntas en las etiquetas