Pages: 1 ... 118 119 [120] 121 122 ... 174
Author Topic: The Volvo ME7 thread:  (Read 942958 times)
SparkyR
Full Member
***

Karma: +18/-21
Offline 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 Offline

Posts: 54


« 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 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 Offline

Posts: 136


« 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 Offline

Posts: 54


« 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 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 Offline

Posts: 54


« 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 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 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 Offline

Posts: 54


« 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 Offline

Posts: 26


« 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
Sr. Member
****

Karma: +57/-58
Online Online

Posts: 306



WWW
« 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:
Code:
#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

Россия - Великая страна!
https://youtu.be/fup5GzIFdXk
dikidera
Full Member
***

Karma: +8/-8
Offline Offline

Posts: 136


« 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 Offline

Posts: 68


« Reply #1798 on: November 03, 2022, 04:02:20 AM »

Checksum check is a simple:
Code:
#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
Sr. Member
****

Karma: +57/-58
Online Online

Posts: 306



WWW
« 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

Россия - Великая страна!
https://youtu.be/fup5GzIFdXk
Pages: 1 ... 118 119 [120] 121 122 ... 174
  Print  
 
Jump to:  

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines Page created in 0.028 seconds with 17 queries. (Pretty URLs adds 0.001s, 0q)