VS1000 power off transient.

Writing software that controls the system and peripherals such as displays, SD cards, Buttons, LEDs, Serial Ports etc.
Post Reply
ed_haslam
User
Posts: 10
Joined: Wed 2023-10-25 8:00

VS1000 power off transient.

Post by ed_haslam »

Hello,

I've designed a custom board using the VS1000D for a consumer product under development. It's working well except at power off there's a large transient on the audio outputs and it causes a large current spike from the audio power amplifier, triggering our lithium battery overcurrent protection circuit. If I could set VIO to zero volts a short period before calling RealPowerOff that should disable our amplifier (shutdown pin is connected to VIO) and prevent the transient from causing a large current spike. Theoretically, setting the volume to minimum might also work. Wondering if there's any way to minimize this transient in firmware? I've tried variations of the following in the power off routine but nothing has worked so far.

#ifdef USE_POWERBUTTON
if (PERIP(SCI_STATUS) & SCISTF_REGU_POWERBUT) {

voltages[voltIoPlayer] = 0; /*1.7V*/
PowerSetVoltages(&voltages[voltCoreUSB]);

volumeReg = 0x0000;
SetVolume();

BusyWait10();
BusyWait10();
BusyWait10();
BusyWait10();
BusyWait10();
BusyWait10();
BusyWait10();
BusyWait10();
BusyWait10();
BusyWait10();

PERIP(GPIO0_CLEAR_MASK) = GPIO0_SD_POWER;
RealPowerOff();
}
#endif

Thank you for any help you might be able to provide.
ed_haslam
User
Posts: 10
Joined: Wed 2023-10-25 8:00

Re: VS1000 power off transient.

Post by ed_haslam »

Hi,

Turns out I was updating the IO supply voltage register but then setting the USB voltage. Corrected code that's working is below:

#ifdef USE_POWERBUTTON
if (PERIP(SCI_STATUS) & SCISTF_REGU_POWERBUT) {

volumeReg = 0xC0C0;;
SetVolume();

voltages[voltIoPlayer] = 0; /*1.7V*/
PowerSetVoltages(&voltages[voltCorePlayer]);

PERIP(GPIO0_CLEAR_MASK) = GPIO0_SD_POWER;

{int i;
for (i=0; i<100; i++){
BusyWait10();
}
}

RealPowerOff();
}
#endif

There's now no turn off transient. Can you please tell me if there's a way to turn the VIO regulator off altogether though? 1.7V as a minimum is workable but this is a consumer product and if we can save the cost of a level detector to sense 1.7V or 3.3V IO power to determine when to mute the amplifier that would be great. I don't have any outputs left on the VS1000 to activate the amplifier mute line directly.

Thank you,

Ed
User avatar
pasi
VLSI Staff
Posts: 2136
Joined: Thu 2010-07-15 16:04

Re: VS1000 power off transient.

Post by pasi »

In vs1000 there is a common shutdown bit for all regulators. Also, in vs1000 the crystal oscillator works from IOVDD, so turning off IOVDD would mean the chip can never start up under software control anymore. The same applies to xRESET, which is referenced to IOVDD, and would (or would not) assert if IOVDD is lost.

Note that the transient on audio outputs doesn't really come from IOVDD. The analog is powered from AVDD.

You could turn off the analog drivers (set SCISTF_ANADRV_PDOWN), so that LEFT/RIGHT/CBUF start to float first (but they'll still bias around the RCAP voltage).

Can you share the schematics (pdf)? (Send to support@vlsi.fi if you can't share it publically.)
Visit https://www.facebook.com/VLSISolution VLSI Solution on Facebook
Post Reply