Re: Tesla Model 3 Battery Hacking
Posted: Wed Aug 05, 2020 9:22 pm
openinverter Community
https://openinverter.org:443/forum/
Code: Select all
6E9F
CE9F
DC9F
29DD
EB
9FE5
9FDC
9F35
86FF
6E9F
CE9F
DC9F
29DD
EB
9FE5
9FDC
9F35
86FF
6E9F
CE9F
DC9F
29DD
EB
9FE5
9FDC
9F35
86FF
6E9F
CE9F
DC9F
29DD
EB
Code: Select all
// inslude the SPI library:
#include <SPI.h>
#define SS 10
uint16_t send1=0x2ad4;
uint16_t send2=0x0000;
uint16_t req47_a=0x4700;
uint16_t req47_b=0x7000;
uint16_t padding=0x0000;
uint16_t receive1=0;
uint16_t receive2=0;
byte count1=0;
byte count2=0;
void setup() {
// put your setup code here, to run once:
SPI.begin();
pinMode(SS,OUTPUT); //select pin
SerialUSB.begin(115200);//normal port
}
void loop() {
for(count1=0; count1<=8; count1++)
{
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE3));//1mhz clock,msb first, mode 3
digitalWrite (SS, LOW); // assert Slave Select
receive1 = SPI.transfer16(send1); // do a transfer
receive2 = SPI.transfer16(send2); // do a transfer
//if (receive2!=65535) SerialUSB.println(receive2,HEX);
digitalWrite (SS, HIGH); // de-assert Slave Select
SPI.endTransaction (); // transaction over
delayMicroseconds(20);
}
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE3));//1mhz clock,msb first, mode 3
digitalWrite (SS, LOW); // assert Slave Select
receive1 = SPI.transfer16(req47_a); // do a transfer
receive2 = SPI.transfer16(req47_b); // do a transfer
for(count2=0; count2<=36; count2++)
{
receive1 = SPI.transfer16(padding); // do a transfer
if (receive1!=0xffff) SerialUSB.println(receive1,HEX);
}
digitalWrite (SS, HIGH); // de-assert Slave Select
SPI.endTransaction (); // transaction over
delayMicroseconds(35);
}
Code: Select all
0x47 Request:
6E9F
CE9F
DC9F
29DD
EB
9FE5
9FDC
9F35
86FF
0x48 Request:
FC9F
D39F
FB9F
2E03
D8
9FCD
9FEA
9F19
8BFF
0x49 Request:
DE9F
F09F
7C9F
2E80
D9
9FD9
9FDE
9F30
5FF
0x4A Request:
A0
FA9F
84A0
14DC
8C
9FE7
9FED
9F38
83FF
0x4B Request:
0x4C Request:
200
A481
ECD
2
C5
7703
3EFF
0x47 Request:
6E9F
CE9F
DC9F
29DD
EB
9FE5
9FDC
9F35
86FF
0x48 Request:
FC9F
D39F
FB9F
2E03
D8
9FCD
9FEA
9F19
8BFF
0x49 Request:
DE9F
F09F
7C9F
2E80
D9
9FD9
9FDE
9F30
5FF
0x4A Request:
A0
FA9F
84A0
14DC
8C
9FE7
9FED
9F38
83FF
0x4B Request:
0x4C Request:
200
A481
ECD
2
C5
7703
3EFF
Code: Select all
// inslude the SPI library:
#include <SPI.h>
#define SS 10
uint16_t send1=0x2ad4;
uint16_t send2=0x0000;
uint16_t req47_a=0x4700;
uint16_t req47_b=0x7000;
uint16_t req48_a=0x4800;
uint16_t req48_b=0x3400;
uint16_t req49_a=0x4900;
uint16_t req49_b=0xdd00;
uint16_t req4a_a=0x4a00;
uint16_t req4a_b=0xc900;
uint16_t req4b_a=0x4b00;
uint16_t req4b_b=0x2000;
uint16_t req4c_a=0x4c00;
uint16_t req4c_b=0xe100;
uint16_t padding=0x0000;
uint16_t Request_A=0x0000;
uint16_t Request_B=0x0000;
uint16_t receive1=0;
uint16_t receive2=0;
byte count1=0;
byte count2=0;
void setup() {
// put your setup code here, to run once:
SPI.begin();
pinMode(SS,OUTPUT); //select pin
SerialUSB.begin(115200);//normal port
}
void loop() {
StartUP();
Request_A=req47_a;
Request_B=req47_b;
SerialUSB.println("0x47 Request:");
GetData();
StartUP();
Request_A=req48_a;
Request_B=req48_b;
SerialUSB.println("0x48 Request:");
GetData();
StartUP();
Request_A=req49_a;
Request_B=req49_b;
SerialUSB.println("0x49 Request:");
GetData();
StartUP();
Request_A=req4a_a;
Request_B=req4a_b;
SerialUSB.println("0x4A Request:");
GetData();
StartUP();
Request_A=req4b_b;
Request_B=req4b_b;
SerialUSB.println("0x4B Request:");
GetData();
StartUP();
Request_A=req4c_a;
Request_B=req4c_b;
SerialUSB.println("0x4C Request:");
GetData();
}
void GetData()
{
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE3));//1mhz clock,msb first, mode 3
digitalWrite (SS, LOW); // assert Slave Select
receive1 = SPI.transfer16(Request_A); // do a transfer
receive2 = SPI.transfer16(Request_B); // do a transfer
for(count2=0; count2<=36; count2++)
{
receive1 = SPI.transfer16(padding); // do a transfer
if (receive1!=0xffff) SerialUSB.println(receive1,HEX);
}
digitalWrite (SS, HIGH); // de-assert Slave Select
SPI.endTransaction (); // transaction over
delay(75);
}
void StartUP()
{
for(count1=0; count1<=8; count1++)
{
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE3));//1mhz clock,msb first, mode 3
digitalWrite (SS, LOW); // assert Slave Select
receive1 = SPI.transfer16(send1); // do a transfer
receive2 = SPI.transfer16(send2); // do a transfer
//if (receive2!=65535) SerialUSB.println(receive2,HEX);
digitalWrite (SS, HIGH); // de-assert Slave Select
SPI.endTransaction (); // transaction over
delayMicroseconds(20);
}
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE3));//1mhz clock,msb first, mode 3
digitalWrite (SS, LOW); // assert Slave Select
receive1 = SPI.transfer16(0x4f00); // do a transfer
receive2 = SPI.transfer16(0x5f00); // do a transfer
digitalWrite (SS, HIGH); // de-assert Slave Select
SPI.endTransaction (); // transaction over
delayMicroseconds(35);
}
Please do not contact Damien directly... I've seen his email inbox and it's crazy... the only sustainable way of maintaining this development is through this forumJack Bauer wrote: ↑Thu Aug 06, 2020 11:29 am Given the amount of emails and other contacts over the past few days it seems we have quite a few lurkers on this thread. Don't be shy. Join up and help.
Mind creating a capture of this? I will then smash some code together, first just standalone to get voltages and such then possibly port it into SimpBMS.Jack Bauer wrote: ↑Thu Aug 06, 2020 10:22 am Well given my programming skills I'm probably asking it for elons favorite breakfast cereal but we get :
from this program which I think is sending request 0x47 :Code: Select all
6E9F CE9F DC9F 29DD EB 9FE5 9FDC 9F35 86FF 6E9F CE9F DC9F 29DD EB 9FE5 9FDC 9F35 86FF 6E9F CE9F DC9F 29DD EB 9FE5 9FDC 9F35 86FF 6E9F CE9F DC9F 29DD EB
Code: Select all
// inslude the SPI library: #include <SPI.h> #define SS 10 uint16_t send1=0x2ad4; uint16_t send2=0x0000; uint16_t req47_a=0x4700; uint16_t req47_b=0x7000; uint16_t padding=0x0000; uint16_t receive1=0; uint16_t receive2=0; byte count1=0; byte count2=0; void setup() { // put your setup code here, to run once: SPI.begin(); pinMode(SS,OUTPUT); //select pin SerialUSB.begin(115200);//normal port } void loop() { for(count1=0; count1<=8; count1++) { SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE3));//1mhz clock,msb first, mode 3 digitalWrite (SS, LOW); // assert Slave Select receive1 = SPI.transfer16(send1); // do a transfer receive2 = SPI.transfer16(send2); // do a transfer //if (receive2!=65535) SerialUSB.println(receive2,HEX); digitalWrite (SS, HIGH); // de-assert Slave Select SPI.endTransaction (); // transaction over delayMicroseconds(20); } SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE3));//1mhz clock,msb first, mode 3 digitalWrite (SS, LOW); // assert Slave Select receive1 = SPI.transfer16(req47_a); // do a transfer receive2 = SPI.transfer16(req47_b); // do a transfer for(count2=0; count2<=36; count2++) { receive1 = SPI.transfer16(padding); // do a transfer if (receive1!=0xffff) SerialUSB.println(receive1,HEX); } digitalWrite (SS, HIGH); // de-assert Slave Select SPI.endTransaction (); // transaction over delayMicroseconds(35); }
Code: Select all
0x48 Request:
FC9F
D39F
FB9F
2E03
D8
9FCD
9FEA
9F19
8BFF
0x49 Request:
DE9F
F09F
7C9F
2E80
D9
9FD9
9FDE
9F30
5FF
0x4A Request:
A0
FA9F
84A0
14DC
8C
9FE7
9FED
9F38
83FF
0x4B Request:
0x4C Request:
200
A481
ECD
2
C5
7703
3EFF
0x4D Request:
0x4E Request:
0x4F Request:
0x50 Request:
0x47 Request:
6E9F
CE9F
DC9F
29DD
EB
9FE5
9FDC
9F35
86FF
0x48 Request:
FC9F
D39F
FB9F
2E03
D8
9FCD
9FEA
9F19
8BFF
0x49 Request:
DE9F
F09F
7C9F
2E80
D9
9FD9
9FDE
9F30
5FF
0x4A Request:
A0
FA9F
84A0
14DC
8C
9FE7
9FED
9F38
83FF
0x4B Request:
0x4C Request:
200
A481
ECD
2
C5
7703
3EFF
0x4D Request:
0x4E Request:
0x4F Request:
0x50 Request:
0x47 Request:
6E9F
CE9F
DC9F
29DD
EB
9FE5
9FDC
9F35
86FF
0x48 Request:
Code: Select all
// inslude the SPI library:
#include <SPI.h>
#define SS 10
uint16_t send1=0x2ad4;
uint16_t send2=0x0000;
uint16_t send3=0x21f2;
uint16_t send4=0x4d00;
uint16_t send5=0x0008;
uint16_t sendX=0x0000;
uint16_t sendY=0x0000;
uint16_t req47_a=0x4700;
uint16_t req47_b=0x7000;
uint16_t req48_a=0x4800;
uint16_t req48_b=0x3400;
uint16_t req49_a=0x4900;
uint16_t req49_b=0xdd00;
uint16_t req4a_a=0x4a00;
uint16_t req4a_b=0xc900;
uint16_t req4b_a=0x4b00;
uint16_t req4b_b=0x2000;
uint16_t req4c_a=0x4c00;
uint16_t req4c_b=0xe100;
uint16_t req4d_a=0x0100;
uint16_t req4d_b=0x2700;
uint16_t req4e_a=0x0100;
uint16_t req4e_b=0x3300;
uint16_t req4f_a=0x0100;
uint16_t req4f_b=0xda00;
uint16_t req50_a=0x0000;
uint16_t req50_b=0x9400;
uint16_t padding=0x0000;
uint16_t Request_A=0x0000;
uint16_t Request_B=0x0000;
uint16_t receive1=0;
uint16_t receive2=0;
byte count1=0;
byte count2=0;
void setup() {
// put your setup code here, to run once:
SPI.begin();
pinMode(SS,OUTPUT); //select pin
SerialUSB.begin(115200);//normal port
}
void loop() {
StartUP();
sendX=0x21f2;
sendY=0x4d00;
Generic_Send_Once();
sendX=0x0800;
sendY=0x0000;
Generic_Send_Once();
sendX=0x2ad4;
sendY=0x4d00;
Generic_Send_Once();
sendX=0x0800;
sendY=0x0000;
Generic_Send_Once();
Request_A=req47_a;
Request_B=req47_b;
SerialUSB.println("0x47 Request:");
GetData();
StartUP();
Request_A=req48_a;
Request_B=req48_b;
SerialUSB.println("0x48 Request:");
GetData();
StartUP();
Request_A=req49_a;
Request_B=req49_b;
SerialUSB.println("0x49 Request:");
GetData();
StartUP();
Request_A=req4a_a;
Request_B=req4a_b;
SerialUSB.println("0x4A Request:");
GetData();
StartUP();
Request_A=req4b_b;
Request_B=req4b_b;
SerialUSB.println("0x4B Request:");
GetData();
StartUP();
Request_A=req4c_a;
Request_B=req4c_b;
SerialUSB.println("0x4C Request:");
GetData();
StartUP();
Request_A=req4d_a;
Request_B=req4d_b;
SerialUSB.println("0x4D Request:");
GetData();
StartUP();
Request_A=req4e_a;
Request_B=req4e_b;
SerialUSB.println("0x4E Request:");
GetData();
StartUP();
Request_A=req4f_a;
Request_B=req4f_b;
SerialUSB.println("0x4F Request:");
GetData();
StartUP();
Request_A=req50_a;
Request_B=req50_b;
SerialUSB.println("0x50 Request:");
GetData();
}
void GetData()
{
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE3));//1mhz clock,msb first, mode 3
digitalWrite (SS, LOW); // assert Slave Select
receive1 = SPI.transfer16(Request_A); // do a transfer
receive2 = SPI.transfer16(Request_B); // do a transfer
for(count2=0; count2<=36; count2++)
{
receive1 = SPI.transfer16(padding); // do a transfer
if (receive1!=0xffff) SerialUSB.println(receive1,HEX);
//SerialUSB.println(receive1,HEX);
}
digitalWrite (SS, HIGH); // de-assert Slave Select
SPI.endTransaction (); // transaction over
delay(75);
}
void StartUP()
{
for(count1=0; count1<=4; count1++)
{
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE3));//1mhz clock,msb first, mode 3
digitalWrite (SS, LOW); // assert Slave Select
receive1 = SPI.transfer16(send1); // do a transfer
receive2 = SPI.transfer16(send2); // do a transfer
digitalWrite (SS, HIGH); // de-assert Slave Select
SPI.endTransaction (); // transaction over
delayMicroseconds(20);
}
}
void Generic_Send_Once()
{
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE3));//1mhz clock,msb first, mode 3
digitalWrite (SS, LOW); // assert Slave Select
receive1 = SPI.transfer16(sendX); // do a transfer
receive2 = SPI.transfer16(sendY); // do a transfer
digitalWrite (SS, HIGH); // de-assert Slave Select
SPI.endTransaction (); // transaction over
delayMicroseconds(20);
}
Wish I knew how to help but programming and EE are unfortunately not my forte; so please accept the humble funds I sent to your patreon instead. Really inspired by the collaboration and excited by the progress, guys!
Code: Select all
0x47 Request:
0x48 Request:
0x49 Request:
0x4A Request:
0x4B Request:
0x4C Request:
0x4D Request:
0x4E Request:
0x4F Request:
0x50 Request:
Module 1 : | 4231mV| 4231mV| 0mV| 4334mV| 4334mV| 0mV| 4927mV| 4927mV| 0mV| 5132mV| 5132mV| 0mV| 12mV| 12mV
Module 2 : | 0mV| 0mV| 0mV| 0mV| 0mV| 0mV| 0mV| 0mV| 0mV| 0mV| 0mV| 0mV| 0mV| 0mV
0x47 Request:
0x48 Request:
0x49 Request:
0x4A Request:
0x4B Request:
0x4C Request:
0x4D Request:
0x4E Request:
0x4F Request:
0x50 Request:
Module 1 : | 4231mV| 4231mV| 0mV| 4334mV| 4334mV| 0mV| 4927mV| 4927mV| 0mV| 5132mV| 5132mV| 0mV| 12mV| 12mV
Module 2 : | 0mV| 0mV| 0mV| 0mV| 0mV| 0mV| 0mV| 0mV| 0mV| 0mV| 0mV| 0mV| 0mV| 0mV
Code: Select all
0x48 Request:
FC9F
D39F
FB9F
2E03
D8
9FCD
9FEA
9F19
8BFF
0x49 Request:
DE9F
F09F
7C9F
2E80
D9
9FD9
9FDE
9F30
5FF
0x4A Request:
A0
FA9F
84A0
14DC
8C
9FE7
9FED
9F38
83FF
0x4B Request:
509F
0
200
2B9E
0
2
2
24
A2FF
0x4C Request:
200
A481
ECD
2
C5
7703
3EFF
0x4D Request:
Dammit, yes that mistake remained. If we get confirmation of the voltages working we can move on, otherwise we got to dig to find out why the voltages are not updating.muehlpower wrote: ↑Fri Aug 07, 2020 6:51 pm it doesn't have to be " g <= 14" for usb printing to see the last value?
Please run it with debug on, I need to check the moving of certain bytes.
Code: Select all
0x2BFB