E46 BMW Social Directory E46 FAQ 3-Series Discussion Forums BMW Photo Gallery BMW 3-Series Technical Information E46 Fanatics - The Ultimate BMW Resource BMW Vendors General E46 Forum The Tire Rack's Tire Wheel Forum Forced Induction Forum The Off-Topic The E46 BMW Showroom For Sale, For Trade or Wanting to Buy

Welcome to the E46Fanatics forums. E46Fanatics is the premiere website for BMW 3 series owners around the world with interactive forums, a geographical enthusiast directory, photo galleries, and technical information for BMW enthusiasts.

You are currently viewing our boards as a guest which gives you limited access to view most discussions and access our other features. By joining our free community you will have access to post topics, communicate privately with other members (PM), respond to polls, upload content and access many other special features. Registration is fast, simple and absolutely free so please, join our community today!

If you have any problems with the registration process or your account login, please contact contact us.

Go Back   E46Fanatics > Tuning & Tech > Driveline, Engine & DME Tuning

Driveline, Engine & DME Tuning
Talk about driveline improvements, NA tuning and DME tuning your E46 BMW here. This includes diffs, intakes, exhausts, chips, software and OBD tuning.

Thread Tools Search this Thread Rate Thread Display Modes
Old 12-10-2012, 04:09 PM   #1
Registered User
Join Date: Feb 2008
Location: Philadelphia
Posts: 6,919
My Ride: M3 & ZHP
MSS54 Checksum Calculation

I and a few other members at M3Forum have been researching the MSS54/HP and solving the checksum algorithm is part of that effort.

We recently solved the MSS54HP algorithm. It's actually quite simple. The MSS54HP ROM is a 64k file that consists of two 32k segments destined for separate EEPROMs. For simplicity sake, we'll consider these two 32k segments as entirely separate files. Checksum algorithm is the same for both halves.

What you do is take the first 0x4000 bytes and move them to the end (so what used to be byte 0 is now byte 4000, etc...).
Then select the first 7FFC bytes and calculate the CRC16 for those values (using the common polynomial - 8005). The result of this calculation is the checksum.
Rearrange the file back to the original order, and place the checksum at offset 3FFC.

Now the MSS54 non-HP ECUs are giving me a bit of trouble. These are 32k ROMs which can be treated two separate 16k ROMs.
In either one of these 16k pieces, calculate the CRC16 for the first 3FFC bytes.
If you compare it to a known checksum, you'll notice that it's not the same. Instead, I have found that the difference between the CRC16 and the actual checksum is always either C00 or 1400

I have found that if the first digit of the CRC16 is odd, you subtract C00 or 1400 from the checksum. If it's even, you add the value.

Problem is, I can't figure out a rhyme or a reason as to why sometimes the shift is C00 and why it's sometimes 1400. When I correct checksum via WinOLS, some changes cause the correction to be C00, others cause an addition/subtraction of 1400. So presumably there is a rule that determines the change that I am not able to see.
There may also be additions/subtractions of different values, though I have not come across any such examples yet (and I've looked at a lot of files)

Does anyone have any experience with these kind of things? Any hints you can give me?

Last edited by TerraPhantm; 12-10-2012 at 06:05 PM.
TerraPhantm is offline   Reply With Quote
Ads by Google

Guests, get your FREE E46Fanatics.com membership to remove this ad.
Old 12-11-2012, 10:50 AM   #2
Registered User
Join Date: Nov 2005
Location: Phoenix
Posts: 270
My Ride: BMW FTW
Read the thread. PM'd.
smooth1 is offline   Reply With Quote

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Censor is OFF

All times are GMT -5. The time now is 07:37 PM.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
(c) 1999 - 2016 performanceIX Inc - privacy policy - terms of use