¿Cómo se detecta mediante programación el recuento de pin en un MSP430G2553?

3

Estoy usando un Launchpad para programar un controlador MSP430G2553. Lo uso para la depuración. Este controlador tiene 20 pines. Sin embargo, el objetivo final aquí es ejecutar mi programa en un controlador MSP430G2553IPW28R. Este controlador tiene 28 pines en lugar de 20.

Estoy usando los pines P3.0 y P3.1 en el controlador de 28 pines para algunos LED. Y mi controlador de launchpad no tiene esos pines. Necesito determinar en qué controlador se está ejecutando el código.

Usaré los pines JTAG de mi launchpad para programar el controlador de 28 pines. Entonces, la pregunta es, ¿cómo puedo determinar mediante programación cuál de los 2 controladores está ejecutando mi código y poner algún tipo de #define en su lugar para usar los pines P3.0, P3.1 cuando se ejecuta en el controlador de 28 pines y pines? P2.1 y P2.2 cuando se ejecuta en el controlador Launchpad. No quiero hacer comentarios ni comentar las líneas de código cada vez que cambio de un procesador a otro ...

Tenga en cuenta que estoy usando Energia como mi entorno de desarrollo.

    
pregunta Curtis

3 respuestas

1

El método a continuación le dirá si existe un pin en el controlador. Entonces, para determinar si estamos usando un controlador de 20 o 28 pines, seleccione un pin digital que sea > 20 y pásalo como parámetro a la función de abajo. Si devuelve true, tienes un controlador de 28 pin. Si devuelve falso, tienes un controlador de 20 pin. Probé esto usando mi Launchpad MSP430G2553 y obtuve los siguientes resultados:

  showPinExistence(2);
  showPinExistence(3);
  showPinExistence(5);
  showPinExistence(6);
  showPinExistence(7);
  showPinExistence(8);
  showPinExistence(11);
  showPinExistence(15);
  showPinExistence(18);
  showPinExistence(21);
  showPinExistence(22);
  showPinExistence(23);


void showPinExistence(int pin)
{
  Serial.print("Pin ");
  Serial.print(pin);
  Serial.print(" Exists: ");
  Serial.println(pinExists(pin)?"True":"False");
  Serial.flush();
}

bool pinExists(int pin)
{
    bool lowResult;
    bool highResult;

    pinMode(pin, OUTPUT);
    digitalWrite(pin, LOW);
    lowResult = digitalRead(pin);

    digitalWrite(pin, HIGH);
    highResult = digitalRead(pin);

    return lowResult != highResult;
}

Aquí está la salida para LaunchPad con MSP430G2553 (20 pin):

Pin 2 Exists: True
Pin 3 Exists: True
Pin 5 Exists: True
Pin 6 Exists: True
Pin 7 Exists: True
Pin 8 Exists: True
Pin 11 Exists: True
Pin 15 Exists: True
Pin 18 Exists: True
Pin 21 Exists: False
Pin 22 Exists: False
Pin 23 Exists: False

Aquí está la salida para MSP430G2553 (28 pin):

Pin 8 Exists: True
Pin 9 Exists: True
Pin 10 Exists: True
Pin 11 Exists: True
Pin 12 Exists: True
Pin 13 Exists: True
Pin 14 Exists: True
Pin 15 Exists: True
Pin 16 Exists: True
Pin 17 Exists: True
Pin 18 Exists: True
Pin 19 Exists: True
Pin 20 Exists: True
Pin 21 Exists: True
Pin 22 Exists: True
Pin 23 Exists: True

Tuve que comenzar con el pin 8 porque no me gustó cuando intenté establecer 2-7 como pines de salida :-) De todos modos, el punto es que puedes intentar configurar el pin 23 como un pin de salida y escribir y lea su valor para determinar si el chip que está utilizando es de 20 pines, o si tiene más de 20 pines. No tengo un chip de 32 pines, pero me imagino que podrías probar en un pin superior a 28 para determinar si es un chip de 32 pines.

Ahora, después de todo lo que he dicho. Desde que escribí esto, descubrí que ahora hay soporte de 28 pines en GitHub. Ahora lo estoy usando y me refiero a los pines con su notación P3_0, P2_0 correcta en lugar de hacerlo directamente por el número de Pin y esto parece estar funcionando bien ahora.

    
respondido por el Curtis
0

Dependiendo de la complejidad del proyecto y el tamaño de la MCU, utilizo de 1 a 3 pines para la "identificación de PCB" con resistencias de extracción externas. Los resistores se montan en función de la revisión de la placa. La aplicación dentro de la MCU mira estos pines al inicio y determina qué hacer.

Es aún más útil si tiene varios productos con algunas diferencias que le permiten tener una única imagen binaria para todas las revisiones de hardware.

    
respondido por el filo
0

En mi opinión, la opción más preferida es buscar una ID de chip en la documentación. La mayoría de los chips modernos proporcionan un registro interno con el tipo de chip y la revisión. Podrías usar eso para impulsar tu lógica.

Para la familia MSP430, he podido encontrar algunas IDs básicas en la documentación de BSL ( página 37). Sin embargo, estos solo limitan a la familia mueren y no distinguen entre paquetes de chips. Aún podría intentar probar y verificar si hay alguna diferencia.

Alternativamente, podría usar cambios físicos en la placa, como agregar pull-up / downs en ciertos pines que pueden ser probados por software o atar pines bajos / altos.

    
respondido por el Hans

Lea otras preguntas en las etiquetas