SparkyR
Full Member
Karma: +18/-21
Offline
Posts: 77
|
|
« Reply #1785 on: November 02, 2022, 03:14:30 PM »
|
|
|
Hi, WRHJ software is 250 kbit CAN? fits s60r 2003, in mine it is ĘT03 P2X B5254RT ME 7.0.1 5XQG SW: 30668178A P24 / P26 0310 B5244T4 25RT MAN AWD UE 50QGHJ.a2l 2003-06 CBQGTVD0
heres what i have used for 03-04 autos in a euro file
|
|
|
Logged
|
2005 S60R m66, Xona Rotor 7864, turbosmart 45mm wastegate, id1700cc injectors
|
|
|
t6
Full Member
Karma: +0/-5
Offline
Posts: 55
|
|
« Reply #1786 on: November 02, 2022, 03:18:47 PM »
|
|
|
50wrhj are found in 06-07 some manual and all auto cars. These are all 500kbit
ok thank you, it's been refreshed too late
|
|
|
Logged
|
|
|
|
SparkyR
Full Member
Karma: +18/-21
Offline
Posts: 77
|
|
« Reply #1787 on: November 02, 2022, 03:20:51 PM »
|
|
|
what i had posted was 50QHHJ.A2L SW: 30729087A P24/P26 ÄT03 B5254T4 25RT AUT AWD EU
this can be found at 00018960 in the binary using HXD
|
|
|
Logged
|
2005 S60R m66, Xona Rotor 7864, turbosmart 45mm wastegate, id1700cc injectors
|
|
|
dikidera
Full Member
Karma: +8/-8
Offline
Posts: 149
|
|
« Reply #1788 on: November 02, 2022, 03:24:31 PM »
|
|
|
I have some good news. I managed to find the CAN commands to enter programming mode of the ECU and managed to get replies such as part numbers and so forth, this is absolutely good news. I tried to query for ECU version/hw but I got no reply, so it's obvious those commands are not the same for Denso as they are for ME7/9.
|
|
|
Logged
|
|
|
|
t6
Full Member
Karma: +0/-5
Offline
Posts: 55
|
|
« Reply #1789 on: November 02, 2022, 03:24:41 PM »
|
|
|
whether the variables OD 50QGHJ will match 50QHHJ
|
|
|
Logged
|
|
|
|
SparkyR
Full Member
Karma: +18/-21
Offline
Posts: 77
|
|
« Reply #1790 on: November 02, 2022, 03:25:43 PM »
|
|
|
whether the variables OD 50QGHJ will match 50QHHJ
this file will cross flash into your car. export this as a binary and flash into your car and ignore your original. then start using this file
|
|
« Last Edit: November 02, 2022, 03:27:29 PM by SparkyR »
|
Logged
|
2005 S60R m66, Xona Rotor 7864, turbosmart 45mm wastegate, id1700cc injectors
|
|
|
t6
Full Member
Karma: +0/-5
Offline
Posts: 55
|
|
« Reply #1791 on: November 02, 2022, 03:32:40 PM »
|
|
|
this file will cross flash into your car. export this as a binary and flash into your car and ignore your original. then start using this file
Thank you very much and regards.
|
|
|
Logged
|
|
|
|
rlinewiz
Jr. Member
Karma: +12/-1
Offline
Posts: 42
|
|
« Reply #1792 on: November 02, 2022, 03:50:08 PM »
|
|
|
50wrhj are found in 06-07 some manual and all auto cars. These are all 500kbit
do we have a chart somewhere of all the variants and what cars they belong to? also i assume if i manual swap i can flash a manual bin (once the cem is programmed), correct me if im wrong ps. currently working on code that handles checksum features, what a pain in the ass
|
|
|
Logged
|
2005 S60R M66-Swapped // Self-tuned @ 22psi [[forever coding for the OpenMoose project]]
|
|
|
SparkyR
Full Member
Karma: +18/-21
Offline
Posts: 77
|
|
« Reply #1793 on: November 02, 2022, 03:54:02 PM »
|
|
|
I have never built a list myself, Theres so many different variants.
Yes this is what I usually do. Normally haven’t even had the cem programmed on my cars
|
|
|
Logged
|
2005 S60R m66, Xona Rotor 7864, turbosmart 45mm wastegate, id1700cc injectors
|
|
|
t6
Full Member
Karma: +0/-5
Offline
Posts: 55
|
|
« Reply #1794 on: November 02, 2022, 04:10:59 PM »
|
|
|
Do you have any RAM variables for QHHJ?
|
|
|
Logged
|
|
|
|
V70_T5
Jr. Member
Karma: +1/-1
Offline
Posts: 28
|
|
« Reply #1795 on: November 02, 2022, 06:19:48 PM »
|
|
|
Hello Guys, searching for this old lady some Adresses, i think i found LDRXN but im not sure 138F4@ LDRXN... maybe some hints for X-Axis and other Maps like
KFPED KFMIRL KFMIOP KFLHDBN KFLBTS ?
Softwareversion 10EUHJ.a2l
Found in the Thread some pretuned Files with 0.75 to 0.9 Bar Pressure but the Software Version is different to mine (But Same Engine and MY)
10EUHJ.a2l vs 10ERHJ.a2l
With Best Regards
|
|
« Last Edit: November 02, 2022, 06:51:09 PM by V70_T5 »
|
Logged
|
|
|
|
prometey1982
|
|
« Reply #1796 on: November 03, 2022, 12:21:33 AM »
|
|
|
ps. currently working on code that handles checksum features, what a pain in the ass
Checksum check is a simple: #include "ChecksumHelper.hpp"
namespace util {
namespace { uint32_t getValue(const std::vector<uint8_t>& data, size_t index) { return ((uint32_t)data[index + 3] << 24) + ((uint32_t)data[index + 2] << 16) + ((uint32_t)data[index + 1] << 8) + (uint32_t)data[index]; }
void setValue(std::vector<uint8_t>& data, size_t index, uint32_t value) { data[index] = static_cast<uint8_t>(value); data[index + 1] = static_cast<uint8_t>(value >> 8); data[index + 2] = static_cast<uint8_t>(value >> 16); data[index + 3] = static_cast<uint8_t>(value >> 24); }
}
bool ChecksumHelper::check(const std::vector<uint8_t>& data) const { uint32_t buffer_index = 0x1F810; uint32_t max_buffer_index = 0x1FA00; if (data.size() == 1024 * 1024) max_buffer_index = 0x1FC00; do { uint32_t start_addr = getValue(data, buffer_index);
// Get the checksum zone end address uint32_t end_addr = getValue(data, buffer_index + 4);
if (start_addr >= data.size() || end_addr >= data.size()) break;
uint32_t checksum = 0; for (uint32_t addr = start_addr; addr < end_addr; addr += 2) checksum += ((uint32_t)data[addr + 1] << 8) + (uint32_t)data[addr];
uint32_t curr_checksum = getValue(data, buffer_index + 8); uint32_t compliment_curr_checksum = getValue(data, buffer_index + 12);
uint32_t complchecksum = ~checksum;
if (curr_checksum != checksum || compliment_curr_checksum != complchecksum) return false;
buffer_index += 0x10; } while(buffer_index < max_buffer_index); return true; }
void ChecksumHelper::update(std::vector<uint8_t>& data) const { uint32_t buffer_index = 0x1F810; uint32_t max_buffer_index = 0x1FA00; if (data.size() == 1024 * 1024) max_buffer_index = 0x1FC00; do { uint32_t start_addr = getValue(data, buffer_index);
// Get the checksum zone end address uint32_t end_addr = getValue(data, buffer_index + 4);
if (start_addr >= data.size() || end_addr >= data.size()) break;
uint32_t checksum = 0; for (uint32_t addr = start_addr; addr < end_addr; addr += 2) checksum += ((uint32_t)data[addr + 1] << 8) + (uint32_t)data[addr];
uint32_t complchecksum = ~checksum;
setValue(data, buffer_index + 8, checksum); setValue(data, buffer_index + 12, complchecksum);
buffer_index += 0x10; } while(buffer_index < max_buffer_index); }
}
|
|
« Last Edit: November 03, 2022, 12:25:41 AM by prometey1982 »
|
Logged
|
|
|
|
dikidera
Full Member
Karma: +8/-8
Offline
Posts: 149
|
|
« Reply #1797 on: November 03, 2022, 01:59:31 AM »
|
|
|
Prometey, did you manage to find which CAN commands dump bytes from ROM?
|
|
|
Logged
|
|
|
|
keichi
Full Member
Karma: +10/-2
Offline
Posts: 73
|
|
« Reply #1798 on: November 03, 2022, 04:02:20 AM »
|
|
|
Checksum check is a simple: #include "ChecksumHelper.hpp"
namespace util {
namespace { uint32_t getValue(const std::vector<uint8_t>& data, size_t index) { return ((uint32_t)data[index + 3] << 24) + ((uint32_t)data[index + 2] << 16) + ((uint32_t)data[index + 1] << 8) + (uint32_t)data[index]; }
void setValue(std::vector<uint8_t>& data, size_t index, uint32_t value) { data[index] = static_cast<uint8_t>(value); data[index + 1] = static_cast<uint8_t>(value >> 8); data[index + 2] = static_cast<uint8_t>(value >> 16); data[index + 3] = static_cast<uint8_t>(value >> 24); }
}
bool ChecksumHelper::check(const std::vector<uint8_t>& data) const { uint32_t buffer_index = 0x1F810; uint32_t max_buffer_index = 0x1FA00; if (data.size() == 1024 * 1024) max_buffer_index = 0x1FC00; do { uint32_t start_addr = getValue(data, buffer_index);
// Get the checksum zone end address uint32_t end_addr = getValue(data, buffer_index + 4);
if (start_addr >= data.size() || end_addr >= data.size()) break;
uint32_t checksum = 0; for (uint32_t addr = start_addr; addr < end_addr; addr += 2) checksum += ((uint32_t)data[addr + 1] << 8) + (uint32_t)data[addr];
uint32_t curr_checksum = getValue(data, buffer_index + 8); uint32_t compliment_curr_checksum = getValue(data, buffer_index + 12);
uint32_t complchecksum = ~checksum;
if (curr_checksum != checksum || compliment_curr_checksum != complchecksum) return false;
buffer_index += 0x10; } while(buffer_index < max_buffer_index); return true; }
void ChecksumHelper::update(std::vector<uint8_t>& data) const { uint32_t buffer_index = 0x1F810; uint32_t max_buffer_index = 0x1FA00; if (data.size() == 1024 * 1024) max_buffer_index = 0x1FC00; do { uint32_t start_addr = getValue(data, buffer_index);
// Get the checksum zone end address uint32_t end_addr = getValue(data, buffer_index + 4);
if (start_addr >= data.size() || end_addr >= data.size()) break;
uint32_t checksum = 0; for (uint32_t addr = start_addr; addr < end_addr; addr += 2) checksum += ((uint32_t)data[addr + 1] << 8) + (uint32_t)data[addr];
uint32_t complchecksum = ~checksum;
setValue(data, buffer_index + 8, checksum); setValue(data, buffer_index + 12, complchecksum);
buffer_index += 0x10; } while(buffer_index < max_buffer_index); }
}
Looks like checksum calculation ranges vary even more. In 2002 S60 T5 (20KPSC) 1MB bin checksum is calculated in the range 0x000000-0x0BFFFF so for this particular software variable max_buffer_index = 0x1FAF0.
|
|
|
Logged
|
|
|
|
prometey1982
|
|
« Reply #1799 on: November 03, 2022, 04:20:50 AM »
|
|
|
Looks like checksum calculation ranges vary even more. In 2002 S60 T5 (20KPSC) 1MB bin checksum is calculated in the range 0x000000-0x0BFFFF so for this particular software variable max_buffer_index = 0x1FAF0.
Yes, I caught the situation with 20KPSC software. But it still works when checksum updated twice.
|
|
|
Logged
|
|
|
|
|