Announcement

Collapse
No announcement yet.

Karter16's Silbergrau E46 M3 Journal

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • karter16
    replied
    Okay - Lots of updates.

    George Hill has very patiently tested reading/writing on an MSS54 and helped resolve several issues. I made things worse yesterday by rushing trying not to waste his time and ended up wasting more of his time with dumb mistakes 🙈. Anyhow George has confirmed reading/writing is now working and the logs look great!

    I've also been unable to resist adding some more features this week:

    Re-worked connection screen to help guide users through the connection process. Essentially plug in your cable, turn ignition on. The app will detect ignition when it's active and automatically connect and begin the query process.

    Click image for larger version  Name:	Screenshot 2026-05-10 at 8.33.55 AM.png Views:	0 Size:	77.3 KB ID:	354904

    Ability to read and reset adaptions is now implemented:

    Click image for larger version  Name:	Screenshot 2026-05-10 at 8.44.11 AM.png Views:	0 Size:	231.9 KB ID:	354905

    And Recycle DME (virginisation), EWS Re-sync and EWS Initial Sync are now implemented, but untested. George is planning to test the Recycle DME and EWS Initial Sync features when he gets a chance.

    Click image for larger version

Name:	Screenshot 2026-05-10 at 8.35.12 AM.png
Views:	57
Size:	211.6 KB
ID:	354906


    The app is now converging around a stable feature set. I'm hoping to finish getting things tidied up and am aiming for an initial release next weekend!

    Oh, one other thing, in his testing feedback Bry5on noted that programming mode is slightly inconvenient in that to get out of it (and regain access to features that are blocked in programming mode) it is necessary to power-cycle the ignition and reconnect the app. I've got to do some experimenting but I think I've found a way for the app to reboot the DME and auto-reconnect to it which, if I can get it working well, I will also implement.
    Last edited by karter16; 05-09-2026, 12:56 PM.

    Leave a comment:


  • karter16
    replied
    Originally posted by heinzboehmer View Post
    Sounds like the next quick feature add is to build out the entire test suite that makes up INPA and DIS?
    hahahaha stop giving me shiny things to chase. I need to finish this current shiny thing first

    Leave a comment:


  • heinzboehmer
    replied
    Sounds like the next quick feature add is to build out the entire test suite that makes up INPA and DIS?

    Leave a comment:


  • karter16
    replied
    I'm trying to quickly finish the current feature set
    So I possibly lied...

    Reading/clearing error memory proved surprisingly easy to build out. I started with a quick PoC cause I was interested and it was so successful I just finished it.

    Click image for larger version

Name:	Screenshot 2026-05-06 at 4.15.48 PM.png
Views:	102
Size:	221.4 KB
ID:	354472



    Also added in support for sensing the KL30 and KL15 lines cause why not.

    Click image for larger version

Name:	Screenshot 2026-05-06 at 4.17.59 PM.png
Views:	87
Size:	46.6 KB
ID:	354473

    Leave a comment:


  • 0-60motorsports
    replied
    Originally posted by karter16 View Post

    Nope, the software takes a backup of everything that's in that segment of memory, wipes the segment, and then writes everything back except the bytes specific to the flash counter.


    Sent from my iPhone using Tapatalk
    That is great! Thanks again.

    Leave a comment:


  • karter16
    replied
    Originally posted by 0-60motorsports View Post
    karter16 Would the DME be wiped if we reset the flash counter only?
    Nope, the software takes a backup of everything that's in that segment of memory, wipes the segment, and then writes everything back except the bytes specific to the flash counter.


    Sent from my iPhone using Tapatalk

    Leave a comment:


  • 0-60motorsports
    replied
    karter16 Would the DME be wiped if we reset the flash counter only?

    Leave a comment:


  • karter16
    replied
    Originally posted by George Hill View Post
    Id be interested in giving it a shot on an MSS54, but I don't have a way to BDM if needed. BUT I'm not worried about that as I have some spare DMEs and nothing critical in use. What do you need from me? Shoot me an email [email protected] if its easier.

    Will there be an option to virginize the EWS, so we can sync a used DME with a "new" to it car?
    Awesome that would be great thank you! First round of testing will be read-only anyway, as those logs should give me a fair idea of how it's all looking. After work my time I'll add you to the google drive folder that I'm using for the beta files and will flick you an email with some testing instructions - thanks very much!


    Will there be an option to virginize the EWS, so we can sync a used DME with a "new" to it car?
    Yep there will be for sure. Not as part of 1.0. I'm trying to quickly finish the current feature set and get it out there and then can iterate with additional features. Virginization and EWS sync are high on the list as appreciate this will be useful for quite a few people.

    Leave a comment:


  • George Hill
    replied
    Id be interested in giving it a shot on an MSS54, but I don't have a way to BDM if needed. BUT I'm not worried about that as I have some spare DMEs and nothing critical in use. What do you need from me? Shoot me an email [email protected] if its easier.

    Will there be an option to virginize the EWS, so we can sync a used DME with a "new" to it car?

    Leave a comment:


  • karter16
    replied
    Continuing to make good progress towards getting this releasable.

    heinzboehmer and Bry5on have kindly user-tested and given me excellent feedback to help improve the app and make it as user-friendly as possible. Laundry list of updates below:
    • Fixed an edge case that cause DS2 commands to be interleaved causing a connection drop
    • Added dialog to prevent app closure while DS2 connection active, if a wipe/write action is underway the user must wait until it is finished in order to leave the DME in a clean state, in any other state the user can choose to disconnect and close the app.
    • Added the Flash Counter control to the Write page for better visibility, also warn the user if they attempt a write action with less than 5 flash slots remaining.
    • Added graceful handling of cable/interface disconnection within the app.
    • Found an issue with the Cancel button and ensured it now waits for the current DS2 command to conclude gracefully before cancelling the action.
    • Disabled the cancel button while erase/write activities are in progress.
    • Added full validation of Data/Program binaries. The source file is checked for version information and the app will not allow writing a program file that doesn't match the bootloader on the DME and likewise won't allow writing a data/tune file that doesn't match the program on the DME.
    • Improved coverage of logging messages.
    • Finished the Settings page.
    • Relaxed validation (with extra user warnings) when restoring the Service segment (AIF, etc.) to allow restoration when the AIF region has been corrupted and the DME variant and VIN cannot be determined.
    • Added better handling when the user connects but the car ignition is not on.
    • Bryson noted that for a first time user the entry into fast read, and then the subsequent read of a tune file takes about the same amount of time as just reading the tune at 9600 baud. Have expanding settings to allow user to independently toggle fast read on and off for tune/program reads.
    • Resolved a misunderstanding on my part about the persistence of the ZIF backup.

    So what remains? More testing. The app has been pretty well tested on MSS54HPs, it needs testing with MSS54s. If Heinz gets a chance I think he's going to give it a go on his backup DME, if anyone else has a MSS54, the ability to BDM it if it all goes horribly wrong, and is game to be a guinea pig then let me know :-)

    Leave a comment:


  • 0-60motorsports
    replied
    Love it! Nice work

    Leave a comment:


  • karter16
    replied
    Continuing to make progress:

    - Lots of clean up and refinement of the elements on screen - still more to go, but I'm getting there.
    - Quick pass over the UI to give it a nod to the classic "Windows Silver" #C0C0C0 colour that was prevalent when the MSS54 came into being.
    - Came up with a nice way to visually represent the BRIF/ZIF/DIF data.
    - Added a couple of programming actions "Clear Flash Counter" and "Insert AIF Record" which allows for the insertion of an additional AIF record into the AIF table.
    - Added the ability to choose which segments of a full binary backup you want to restore from a full backup (e.g. data/tune, program, AIF sector, etc.)
    - Filtering and search on logs is now functional.


    Click image for larger version

Name:	Screenshot 2026-05-02 111508.png
Views:	111
Size:	197.2 KB
ID:	354030

    Click image for larger version

Name:	Screenshot 2026-05-02 111523.png
Views:	100
Size:	178.5 KB
ID:	354031

    Click image for larger version

Name:	Screenshot 2026-05-02 111534.png
Views:	106
Size:	163.6 KB
ID:	354032

    Click image for larger version

Name:	Screenshot 2026-05-02 111637.png
Views:	100
Size:	208.1 KB
ID:	354033

    Click image for larger version

Name:	Screenshot 2026-05-02 111709.png
Views:	102
Size:	212.4 KB
ID:	354034

    Click image for larger version

Name:	Screenshot 2026-05-02 111920.png
Views:	103
Size:	286.1 KB
ID:	354035

    Click image for larger version

Name:	Screenshot 2026-05-02 111808.png
Views:	102
Size:	293.6 KB
ID:	354036

    Leave a comment:


  • karter16
    replied
    Originally posted by terra View Post
    Very cool stuff here!

    So regarding baudrate -- I didn't experiment heavily but seems like sending this command after doing the seed/key routine sets the baudrate to 125k without doing anything particularly complicated?

    Click image for larger version  Name:	image.png Views:	0 Size:	130.6 KB ID:	354026​
    Yep it does - however at this point the DME is in normal operating mode (eg the OS is running and it can't keep up with 38400 or 125000 baud rates particularly for bulk read or writes) once it's in boot mode it's not running the OS, literally just sits in a loop to process the DS2 commands and that seems to be what enables it to keep up. I would absolutely love to be proven wrong on this though or to find some cleaner way to get into boot mode. Having gone through the disassembly I'm pretty sure calling a valid wipe command is the only way (without creating a modified boot sector I mean)


    Sent from my iPhone using Tapatalk
    Last edited by karter16; 05-01-2026, 02:58 PM.

    Leave a comment:


  • terra
    replied
    Very cool stuff here!

    So regarding baudrate -- I didn't experiment heavily but seems like sending this command after doing the seed/key routine sets the baudrate to 125k without doing anything particularly complicated?

    Click image for larger version  Name:	image.png Views:	0 Size:	130.6 KB ID:	354026​

    Leave a comment:


  • karter16
    replied
    Some progress updates:
    ​​​​​​
    - I played around with the idea of elevating to 38,400 baud for the initial identification, and backup read before entering 125,000 baud. When the DME is in normal operating mode it officially only supports 9600 baud, when it jumps to programming mode it sits in a tight loop and just processes DS2 commands and the interfaces DS2 communicates on. It's not having the overhead of the OSKAR operating system that means it can support 125,000 baud in this mode. I found even in normal OS mode 38,400 kinda worked provided the block size wasn't too big. I played around with this for a while but decided it wasn't stable enough to make an actual feature.

    - The app flashing mechanism now fully supports sparse writes. The way flash works is you clear the entire segment which resets every byte to 0xFF. You then write in the new binary. If you pass DS2 a packet full of 0xFFs it'll dutifully go and write them all. The quick way to help speed things up is to skip any blocks full of 0xFFs. The better way is to determine a write plan that optimises dynamic block sizes, etc. to strike the right balance between not writing unnecessary 0xFFs but also not ending up with to much overhead from more DS2 write calls.

    - I've rolled "Backups" into a more general "History" function. The app will now require a backup ahead of any destructive action where a backup doesn't already exist. Furthermore every read, write, etc. that is performed is stored as an "action" in history. This way it's easy to see exactly what you did and when, and roll back to a previous setup. I'm not sure whether anyone else really has any use for this, but it will make my own life easier and since I'm the one making this app it is now a feature :-)

    - started working to simplify the UI. My approach with this was to throw all the data points on the page so I could get a good feel for what is useful where, now I'm going through re-organising and pruning anything that isn't needed.

    Leave a comment:

Working...
X