There seems to be an internal conflict inside the MSP430 that causes a 4-5mA draw when using the internal pull-up/pull-down resistor for the MISO pin. The problem description is long, but here goes.
I'm using MSP430F5529 as master on an SPI bus with several peripherals. I use PxREN.y to enable the pull-down resistor on the MISO pin so there won't be an open input when none of the slaves is driving MISO. I also reconfigure the pull-down temporarily as a pull-up when assessing the health of a slave that always transmits a particular bit as a zero. I have used this configuration for a few years now without noticing any trouble. (Testing is pretty thorough around here.)
Today, while testing a new design with Rev E MSP430F5529, I noticed 4-5 mA of unexpected current. I stopped the MCU with a debugger and probed around with my scope. I found the MISO line sitting at Vcc/2 (not good). I doubled checked register values inside the MSP430 to make sure the MSP430 wasn't driving MISO as an output. I double checked chip select signals around the board to make sure none of the slaves were driving MISO. Then I let the MCU run and watched some SPI waveforms which looked like the MSP430 pull-down resistor was pulling to Vcc/2, but only about half the time. (The other half of the time it pulled to Vss as expected.) There was the telltale RC curve from Vcc steering to Vcc/2. So the Vcc/2 source appeared to be inside the MSP430.
After stopping the MCU again in the debugger, I noticed I could make the 4-5mA go away merely by disabling the pull-down resistor (PxREN.y = 0). I could also make it go away by taking pin control away from the USCI (PxSEL.y = 0). Either change (all while the MCU was otherwise stopped) would eliminate the extra current. Putting PxREN.y back to 1 would bring the extra current back, but putting PxSEL.y back would not bring the extra current back. The extra 4-5mA was positively tied to the state of MISO being Vcc/2 instead of the expected state of Vss.
I can only guess that the switching that allows either DVcc or DVss to anchor the pull-up/pull-down resistor is somehow allowing both, which is connecting DVcc to DVss through the switching. That would account for the 4-5mA.
This is our first experience with Rev E of the 'F5529. We've finally gotten through all our old Rev D parts. Now I'm highly suspicious of the Rev E parts! However, this is also a new design so I'm highly suspicious of my own work too!
Does anybody else use the pull-up / pull-down in the same way I do on MISO? I'm starting to think maybe the USCI is too smart and is trying to protect itself from an open input in some other way. Maybe I just can't use PxREN.y with SPI?
I have more experimenting planned for tomorrow, but I'm hoping somebody has some insight perhaps into an error in my configuration or my testing methodology?
Jeff