Hi Oschi
Great investigation so far, would be great for the comunity if we had source code for all the tools here, or some description at least from the programmers.
Do You know how I get from my BH16NS55 1.02 or BW-16D1HT 3.02 former BH16NS55 1.03 to the WH16NS60 Real UHD firmware? Can I use the EEPROM-DATA_MOVER in a clean WH16NS60 firmware? Do You have a clean one? or provide Your WH16NS60 original dump file?
Thank You
Yes the WH16NS60 Clean firmware link (forum.cdrinfo.pl) is further below, afaik that's also the original page and from EEPROM data mover and maybe a main guide from origin.
BUT, First make a backup dump of your original unit's firmware and store that seperately on several storage devices. Some a few users didn't care enough right in time doing this and ended up with a bricked unit, that's why che3vr0n warned. And if I understood Teddy correctly he was partly disappointed, people didn't watch that original firmware-backup-dump matter described at the beginning of both of his guides:
firmware downgrade/crossflashing (wit UHD-friendly NS50 compatible firmwares);
&
UHD-official conversion and vice versa
Steps for dumping firmware : (DOS Method)
- Prepare an USB FreeDOS bootable stick, using Rufus (which can be downloaded here).
- Unzip on USB root the DOSFLASH.zip attached file.
- Enter into motherboard BIOS settings and set SATA Controller as IDE (or Legacy). If you can handle only AHCI, DOSFLASH will not properly work, or it could not work at all.
- Be sure to connect your ASUS/LG drive alone, as SATA Primary Master (USE SATA1 or SATA2 controller ports).
- Enable CSM (Compatibility Support Mode) and boot from the USB stick in Legacy Mode.
- At the command Prompt, type "DOSFLASH" and press Enter. If it does not detect anything, retype again. It could be needed to type DOSFLASH 3-4 times before ASUS/LG device be properly detected.
- It should show the Manufacter ID of your device, namely "MediaTek MT1959".
- Press the relative number of the detected device (1 in my case) and press "R" (without quotes) to dump eeprom firmware.
- Save firmware with the name you like and keep it safe.
---
After having original firmware-dump,+ stored safely:
https://forum.cdrinfo.pl/f29/dosflash-v2-0-patched-support-bh16ns40-bh16ns55-drives-96930/
LG WH16NS60 fw.1.00 Clean
=>
https://www106.zippyshare.com/v/x0llCZ1c/file.html
Free Hexeditor for Windows "HxD"
https://mh-nexus.de/de/hxd/
=>
https://mh-nexus.de/de/downloads.php?product=HxD20
I'd prefer the hexediting method in this case. So if Teddy is right with the hexrange for the UHD-friendly-to-UHD-official-conversion and vice-versa, as well, which I wouldn't doubt, I'd prefer this method,
as the EEPROM data mover seems to behave differently/strangely here.
Other members who found the manual hexediting-method more complex or just more time comsuming favored the EEPROM data mover method, said it would work even here, too.
After having original unit's firmware-dump, + stored safely seperately!!!
If you have question how to use the "HxD" -hexeditor (manual hexediting method); plase ask back.
--
Another way of manual hexediting method, is using "dd" in Linux, e.g. in Knoppix-Live-Linux-System).
After having original unit's firmware-dump, + stored safely seperately!!!
dd-hexediting-method (UHD-friendly to UHD-official-conversion)
First make a copy of your original-dumped firmware, and e.g. rename the copy to: LG_BH16NS55_Original_FW_1.0X_dumped_Dosflash_1.7_-Copy.bin
Make also a copy of WH16NS60 Clean-firmware "LG WH16NS60_1.00.bin" and rename it to
LG_WH16NS60_1.00_Clean_-Copy-edit.bin
dd-hexediting method
Boot Knoppix Live-Linux-System
After having original unit's firmware-dump, + stored safely seperately!!!
Type in a bash/shell/console/terminal/ as "root" in currently present directory with the Clean-firmware files and your original firmware-dump: If unsure how to get there: How to mount a filesystem on a specific partition, in Linux and how to navigate to a directory in command shell, please ask back.
Each commando alone confirmed with pressing return
"Select hex range from 0x1E0000 to 0x1E84FF and copy it from the dumped firmware to the new firmware file."
Code:
dd if=LG_BH16NS55_Original_FW_1.0X_dumped_Dosflash_1.7_-Copy.bin bs=1 skip=1966080 count=34048 of=LG_WH16NS60_1.00_Clean_-Copy-edit.bin seek=1966080 conv=notrunc
-----
"Select now the hex range from 0x1E9000 to 0x1EBFFF from the dumped firmware to the new firmware file."
Code:
dd if=LG_BH16NS55_Original_FW_1.0X_dumped_Dosflash_1.7_-Copy.bin bs=1 skip=2002944 count=12288 of=LG_WH16NS60_1.00_Clean_-Copy-edit.bin seek=2002944 conv=notrunc
---
"Select, at last, the range from 0x1F0000 to the end from the dumped firmware to the new firmware file."
Code:
dd if=LG_BH16NS55_Original_FW_1.0X_dumped_Dosflash_1.7_-Copy.bin bs=1 skip=2031616 of=LG_WH16NS60_1.00_Clean_-Copy-edit.bin seek=2031616 conv=notrunc
The 3rd dd-commando for example doesn't read nor copy over any of the first count of 2031616 (decimal) Bytes ahead of the file. So ignores/skips the first Bytes 0 - 2031615 of the input- and output file.
And starts reading from (including) Byte-number 2031616 (decimal) to including Byte-nr. 2097151 (decimal) (=last Byte): counting from 0)...
from the input file...
and copies that range over to to (here to an already existing) Output-file, so (overwrites) the corresonding bytes in the output-file, starting from including offset 2031616 (decimal).
A count of 2031616 Bytes (0 <-> 2031615) are ahead of the included offset 2031616 (0x1F0000)
(counting strarting with 0)
The difference (in decimal) from whole count of 2097152 Bytes (0 <-> 2097151 / or 0x0 <-> 0x1FFFFF hex.dec.) and whole count of 2031616 Bytes (0 <-> 2031615 dec. / 0x0 <-> 0x1EFFFF hex-dec.)<=that are
before offset 2031616 (=before 0x1F0000 in hex-dec.) is 65536 Bytes.
2097152 Bytes - 2031616 Bytes = 65536 Bytes
= 64 KiBytes
"dd" also starts counting from 0
0x200000 - 0x1F0000 = 0x10000
0x1FFFFF - 0x1EFFFF = 0x10000
0x1FFFFF - 0x1F0000 +1 = 0x10000
3rd hexrange in decimal
0x10000 (hex) -> dec =(65536 Bytes)
File Sizes of all firmware files edited- and unedited = 2 MebiBytes (decimal):
2 MebiBytes (decimal) = 2*1024*1024 Bytes (decimal) = 2,097,152 Bytes (decimal)
2097152 Bytes (decimal) ->hexa-decimal
2097152 Bytes (decimal) =0x200000 (hex-dec.)
Offset including 0x0 <-> including Offset 0x1FFFFF
= 0x200000 Bytes (hex-dec.)
Code:
2097152 Bytes (dec) ->hexa-decimal
2097152 Bytes (dec.) = 2*1024*1024 Bytes
1024 decimal ->hexa-decimal:
1024 / (16^3) = 1024 /4096 = 0
1024 / (16^2) = 1024 / 256 = 4 Rest 0
0000 / (16^1) = 0000 / 16 = 0 Rest 0
0000 / (16^0) = 0000 / 1 = 0 Rest 0
1024 decimal ->hexa-decimal
= 0x400 (hex)
0x400 (hex-dec) * 0x400 (hex-dec) = ?
=>4 (dec.) -> 0x4 (hex-dec.)
=>4 (dec.) * 4 (dec.) = 16 (dec.)
16 (dec.) = 0x10 (hex)
=>0x4 (hex-dec.) *0x4 (hex-dec.) =0x10 (hex-dec.)
=>0x400 * 0x400= (0x4 *0x4 * 0x100 *0x100)
=0x10 *0x10000
=0x100000
0x100000 *0x2 =0x200000
2097152 Bytes (decimal) ->hexa-decimal
2097152 Bytes (decimal) -> 0x200000 Bytes (hex-dec.)
Offset including 0x0 <-> including Offset 0x1FFFFF
= 0x200000 Bytes (hex-dec.)
0x200000 =(0x200001-th) Byte (starting with Byte number 0x0)
0x1FFFFF =200000-th Byte
---
0x200000
- 0x1F0000
1
----------------
0x010000
(0x0 <-> 0x1FFFFF) =0x200000
- (0x0 <-> 0x1EFFFF) =0x1F0000
=0x010000
0x1FFFFF
- 0x1F0000
-------------
0x00FFFF
(including 0x1F0000)
0xFFFF + 0x1 =0x10000
0x10000 (hexa-decimal =>dec.
0x10000 (hex) ->(dec.)
=1 *16^4 + 0 *16^3 + 0 *16^2 + 0 *16^1 + 0* 16^0
= 16*16*16*16 + 0 +0 +0 +0
=256*256
=65536 Bytes
=65536 Bytes / (1024 Bytes/KiByte)
=64 KiBytes