(Aclaración en caso de que no sea dolorosamente obvio - soy muy n00b, especialmente cuando se trata de entender los transistores).
Pensé que lo tenía todo resuelto - un MOSFET de canal p es (o puede ser utilizado como) un interruptor de lado alto para una fuente de voltaje diferente a la que mi MCU está ejecutando. Para comprobar mi comprensión, he montado lo siguiente en una protoboard:
simular este circuito - Esquema creado con CircuitLab
El código en U1 (un arduino de 5V) me permitía conducir la línea alta o baja, o ponerla en un estado alto-z para simular los 3 escenarios. Esperaba que al conducir la línea baja se encendiera el LED a 9V, y al conducirla alta se apagara el LED (0V en el drenaje del mosfet). Lo que ocurrió en realidad fue que no se encendió nada y el drenaje tuvo un voltaje de 6V (5,9V). Estoy bastante confundido - ¿qué está pasando aquí?
Aquí está el mosfet que estoy usando: https://www.sparkfun.com/datasheets/Components/General/FQP27P06.pdf
Está pensado para ser controlado incluso por un nivel lógico de 3,3V, así que 5V debería estar bien.