Opel Ampera GMLAN hacking

Hello All,

My first post here :slight_smile:

I’ve been trying to figure out SWCAN messages of my Ampera (Chevy Volt). I think that I have found some interesting messages but I’m not sure because I can’t reproduce functios that I have recorded. Example I’m pretty sure that door locking will look something like this:

  1. ID: 0x100, message: empty, note: High Voltage Wake Up
  2. ID: 0x062C, message: 01:FF:FF:FF:FF:00:00:00, note: waking up every virtual network
  3. ID: 0x10414040, message: 00:04:FB:05, note: frame to lock the doors

I’m little bit confused because some times playing frames back to CAN bus will actually work and some times not. Will SavvyCAN do the High Voltage Wake Up if I play the the 0x100 message? That might be part of the answer. Or should I send more activation frames to CAN bus before sending commands?

Any help appreciate!

Regards,
Kalle

Ps. Thanks Collin for great software!

HV Wakeup won’t happen at the moment. Technically the hardware is capable but nothing has the ability to ask for it currently. SavvyCAN has no concept of HV wakeup. The M2RET software does but it’s commented out. I thought that maybe 0x100 wasn’t always a HV wakeup signal but it seems like it usually is. I can add that functionality back for the SWCAN interface and have it automatically set HVWakeup any time a 0x100 message is sent.

If sometimes it works and sometimes not it could be the HVWakeup or maybe something else on the bus is overwriting your command message? You might try sending 0x10414040 more than once to see if it works more reliably.

Thanks Collin for the info.

I did more testing and if the SWCAN bus is completely silent the command message do nothing. If the bus is allready wake up it sometimes work. Maybe something is overwriting the message as you wrote. At the weekend I will do more testing.

So if I enable this part of the code, M2RET software will always do the HV wake up when frame 0x100 is send?

if (settings.singleWireMode == 1){
if (build_out_frame.id == 0x100){
if (out_bus == 1){
setSWCANWakeup();
delay(5);

You can see there are two commented out sections there. They were from older GVRET code and never used in M2RET. But, they could be modified to work.

In fact, I just pushed to GIT the changes so that it should now do HV wake up automatically if you try to send a 0x100 message.