Well, I'll be. I think these really do have the wrong signature, not the wrong label.
I decided the only way to really test it, was to test the brown out detection.
The brown out detection works simply by putting the cpu into a reset loop when power browns out, when the power comes back good the reset loop stops and the cpu resets normally. So the quick code below flashes an onboard led a few times at boot/completed reset, turns off brown out detection, and goes to sleep.
With the brown out detection turned off, once sleeping if I dial the volts back to 3.5v the power consumption is circa 850uA, and dialling the volts back up does not cause a reset, indicating that the brown out did not trigger and everything is still sleeping. I do not see a reset on return to 5v+ until the voltage goes down to somewhere under 3v.
With the brown out detection left on (commented out the MCUCR lines), dialing the volts back to 3.5v the power consumption is circa 1000uA, AND it resets as it passes back through 5.something V on the way up.
NB: measurements on cheap-ass meter, the absolute values could be way out, it's the relative difference which is interesting here.
So from that, I think that the only conclusion is that the brown out detection disabling is working, and so, these must be 328P which have a wrong signature, that of a plain, non-p 328.
Can anybody see a flaw in my thinking? Any other ways that I could verify?
// the setup routine runs once when you press reset:
#include <avr/sleep.h>
void setup() {
Serial.begin(9600);
// prints title with ending line break
Serial.println("BOD TEST");
pinMode(13, OUTPUT);
for( int x = 1; x <= 5; x++)
{
digitalWrite(13, HIGH);
delay(100);
digitalWrite(13, LOW);
delay(100);
}
}
// the loop routine runs over and over again forever:
void loop() {
Serial.println("Sleeping...");
delay(500);
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
MCUCR = _BV (BODS) | _BV (BODSE);
MCUCR = _BV (BODS);
sleep_cpu();
sleep_disable();
Serial.println("Waking...");
delay(1000);
}