Read protected pics won't drop any error when reading, will simply send nothing, like it's doing.
If the pic is recogniced, the connection is ok.
Code protected chips should return all zeros (DS 4.3.1). Do you have a spare chip to verify you can read/write a non-protected chip? You might also try reading User ID (DS 4.5).
If all else fails and you are convinced everything is connected and working properly, erase the PIC. Read (target is blank), then program some nonsense and read again. That won't get you the firmware, but it will confirm you are doing it right.
If it is read protected, is it possible to at least read the config bits to confirm that it is protected?
It certainly looks like a user ID, which is readable despite code or eeprom protection.
I agree that is consistent with the chip being protected.
When you say it returns "nothing" from program memory, are you seeing 0's or 1's (as stated in your original post)? The Microchip statement I referenced (DS 4.3.1) about protected chips returning all zeros may be ambiguous. Perhaps it means all 0x3FFF. That's what I see when reading blank program memory. I have never tried to read a hex file from a blank chip, so I don't know what to expect when that is done.
If it is read protected, is it possible to at least read the config bits to confirm that it is protected?As far as I know, yes.
Use Mplab IPE instead IDE!
Click on Settings...Advanced mode. The default password is "microchip".
Now you can enable Window...Target memory views...Configuration Bits
Click on Read and you'll see everything. Check the Code protection bits (CP).
You can switch anytime to Program memory view using the Memory selection field at the bottom.
...
I'm seeing 1's, or all 0x3FFF values to be precise. I don't know if that's because when the IDE/IPE receives no data it just leaves the default 0x3FFF values or if it means something else.
LVP is a programming mode that must be enabled in the config bits.
I'm trying to read the configuration bits to confirm the firmware is read protected...
The ISL94208 is complex battery management IC, you have to load several registers at power-on that defines its working conditions.
The datasheet is available, also the micro code programming manual.
This guy made something with it, but deleted the github repo:
https://robingingras.com/2019/09/04/battery-bank-prototype-1/
Perhabs you can send him a message asking for the code!
From what I read today over the internet there is no way to read a protected PIC, you can just erase-it but forget about reading-it while it's locked.
The ISL94208 is complex battery management IC, you have to load several registers at power-on that defines its working conditions.
The datasheet is available, also the micro code programming manual.
This guy made something with it, but deleted the github repo:
https://robingingras.com/2019/09/04/battery-bank-prototype-1/
Perhabs you can send him a message asking for the code!Hello, this is great, thank you for your answer, it's amazing someone actually used the same IC battery manager as Dyson to create a new design. Never would think about that, what a coincidence.
If the Dyson PIC can be just erased and loaded with something else and save the battery then this would be great!
I contacted Robin and asked him if he wishes to contribute to this battery salvage project. Since he's familiar with the instructions to be put into the ISL94208 battery manager, maybe he can share some of his code.
His github is at: https://github.com/archnemesis?tab=repositories I do not see his old project from 2019 there.
Thanks
I think if you just want to use the battery pack without some of the protections like undervoltage (over-discharge) protection or overvoltage (over-charge) protection, it'd be easy have a simple program on the PIC that says "if button is pressed, tell ISL94208 to turn on discharge MOSFET". However, I'd really like to have all the usual protections like so I can use the normal charger (which is just 26V 750mA if I remember) and not worry about discharging the battery too far.
Using the code from another ISL94208 project is an interesting idea. It'd be interesting to see how complex the code required really is. Perhaps I'm naive but it seems like it might not need to be much more than:
I think if you just want to use the battery pack without some of the protections like undervoltage (over-discharge) protection or overvoltage (over-charge) protection, it'd be easy have a simple program on the PIC that says "if button is pressed, tell ISL94208 to turn on discharge MOSFET". However, I'd really like to have all the usual protections like so I can use the normal charger (which is just 26V 750mA if I remember) and not worry about discharging the battery too far.
Using the code from another ISL94208 project is an interesting idea. It'd be interesting to see how complex the code required really is. Perhaps I'm naive but it seems like it might not need to be much more than:
Hello tinfever,
Archnemesis was kind enough to share the code he used 2 years ago for his battery project, it's here:
https://github.com/archnemesis/BatteryPack_ISL94208_6S/tree/master/lib/ISL94208/src
I am not capable to figure out how that .cpp file can be converted/modified into PIC code since I am not familiar with both controller architectures.
It would be great if you have the skills to use-it to make a working PIC load. If you can explain as god as you kindly did until now, I will be happy to learn myself.
It looks it has many routines, including balancing.
Then, if you succeed to erase the PIC and load a new code, I will be happy to get my own PICkit and try do the same. I am sure many people would love the outcome of this project.
( and the makers of PICkits also..
Regards and happy holydays!
I think if you just want to use the battery pack without some of the protections like undervoltage (over-discharge) protection or overvoltage (over-charge) protection, it'd be easy have a simple program on the PIC that says "if button is pressed, tell ISL94208 to turn on discharge MOSFET". However, I'd really like to have all the usual protections like so I can use the normal charger (which is just 26V 750mA if I remember) and not worry about discharging the battery too far.
Using the code from another ISL94208 project is an interesting idea. It'd be interesting to see how complex the code required really is. Perhaps I'm naive but it seems like it might not need to be much more than:
Hello tinfever,
..................
Regards and happy holydays!
You need to find a C++ compiler that will target your chip.