Dobrica Pavlinušić's random unstructured stuff
B3603: Revision 20


B3606

https://github.com/UsrnameTaken/B3606

D3806

I have unit, there is no alternative firmware for this model but there is for:

https://github.com/delboy711/BST900

https://www.falatic.com/index.php/161/minghe-buckboost-converters-handy-if-youre-careful

B3603

b3603-swim.jpg

newest fork: https://github.com/swegener/b3603

https://hackaday.io/project/4362-power-supply-b3603-alternative-firmware

control_pinouts.png

Specification

Input voltage: 6V ~ 40V
Output voltage: 0V ~ 36V
Output current: 0A ~ 3A
Conversion efficiency: up to 92%
The output ripple: ≤50mV
Working temperature: -40°C ~ +85°C
Working frequency: 150KHz
Short circuit protection: constant current
Voltage regulation/display resolution: 0.01V
Current regulation/display resolution: 0.001A
The minimum display resolution of power: 0.001W
The minimum display resolution of capacity: 0.001AH
Input reverse connect protection: no, if necessary please install diode
Connection mode: terminals
Size: 66 x 50 x 21mm
Weight: 44g

backup existing flash

pi@rpi2 ~/stm8flash $ sudo ./stm8flash -c stlinkv2 -p stm8s003f3 -s eeprom -r b3606/eeprom.bin
action = 1Determine EEPROM area
Reading 128 bytes at 0x4000... OK
Bytes received: 128
pi@rpi2 ~/stm8flash $ sudo ./stm8flash -c stlinkv2 -p stm8s003f3 -s flash -r b3606/flash.bin
action = 1Determine FLASH area
Reading 8192 bytes at 0x8000... OK
Bytes received: 8192
pi@rpi2 ~/stm8flash $ sudo ./stm8flash -c stlinkv2 -p stm8s003f3 -s ram -r b3606/ram.bin
action = 1Determine RAM area
Reading 1024 bytes at 0x0... OK
Bytes received: 1024


unprotect stm8 using stm8flash

https://github.com/vdudouyt/stm8flash/issues/38#issuecomment-195123081

$ echo "00" | xxd -r -p >ROP_CLEAR.bin
$ stm8flash -c stlinkv2 -p stm8s103f3 -s opt -w ROP_CLEAR.bin 

compile

pi@rpi2 ~ $ git clone https://github.com/swegener/b3603
Cloning into 'b3603'...
remote: Counting objects: 1109, done.
remote: Total 1109 (delta 0), reused 0 (delta 0), pack-reus
Receiving objects: 100% (1109/1109), 11.04 MiB | 2.90 MiB/s
Resolving deltas: 100% (770/770), done.
Checking connectivity... done.


pi@rpi2 ~/b3603/stm8 $ sudo apt-get install sdcc


pi@rpi2 ~/b3603/stm8 $ make

Code fits the flash, it is 7930

dpavlin@nuc:/nuc/b3603/stm8$ uname -a
Linux nuc 4.4.0-1-amd64 #1 SMP Debian 4.4.6-1 (2016-03-17) x86_64 GNU/Linux
dpavlin@nuc:/nuc/b3603/stm8$ sdcc -v
SDCC : mcs51/z80/z180/r2k/r3ka/gbz80/tlcs90/ds390/TININative/ds400/hc08/s08/stm8 3.5.0 #9253 (Mar 21 2016) (Linux)
published under GNU General Public License (GPL)

dpavlin@nuc:/nuc/b3603/stm8$ scp b3603.ihx rpi2:stm8flash/






flash

pi@rpi2 ~/stm8flash $ sudo ./stm8flash -c stlinkv2 -p stm8s003f3 -w ./b3603.ihx 
action = 2Determine FLASH area
Writing Intel hex file 8160 bytes at 0x8000... Tries exceeded

# unprotect flash

pi@rpi2 ~/stm8flash $ echo "00" | xxd -r -p >ROP_CLEAR.bin
pi@rpi2 ~/stm8flash $ sudo ./stm8flash -c stlinkv2 -p stm8s003f3 -s opt -w ROP_CLEAR.bin 
action = 2Determine OPT area
Writing binary file 1 bytes at 0x4800... OK
Bytes written: 1

# 




serial

dpavlin@x200:/x200/stm8$ microcom -p /dev/ttyUSB0 -s 38400
connected to /dev/ttyUSB0
Escape character: Ctrl-\
Type the escape character followed by c to get to the menu or q to quit

B3603 starting: Version 1.0.1

pi@rpi2 ~/b3603/stm8 $ cat ~/b3603.sh
#!/bin/sh -x

microcom -s 38400 -p /dev/serial/by-path/platform-3f980000.usb-usb-0\:1.5.1\:1.0-port0

calibrate

pi@rpi2 ~/b3603/stm8 $ ./calibrate.py -a /dev/serial/by-path/platform-3f980000.usb-usb-0:1.5.1:1.0-port0 `readlink -f /dev/serial/by-path/platform-3f980000.usb-usb-0\:1.5.3\:1.0-port0` uni-t-ut61e-ser
OPEN "MODEL: B3603"
# ignored  ['STATUS', '']
# ignored  ['DONE']
# ignored  ['']
PSU Input voltage is 12.144, will use 20 steps between 1.0 and 11.144
Setting voltage to 1.0
Multimeter samples vary too much, stddev=0.431414, data: [2.295, 1.6859, 1.2426]
Failed to read stable value, trying again, maybe
Step 0 Set voltage 1.000000 Read voltage 0.546833 PWM 210.0 ADC 197.0 (0.661)
Setting voltage to 1.5
Step 1 Set voltage 1.500000 Read voltage 1.007600 PWM 298.0 ADC 284.0 (1.153)
Setting voltage to 2.0
Step 2 Set voltage 2.000000 Read voltage 1.496967 PWM 387.0 ADC 373.0 (1.656)
Setting voltage to 2.5
Step 3 Set voltage 2.500000 Read voltage 1.980900 PWM 475.0 ADC 462.0 (2.159)
Setting voltage to 3.0
Step 4 Set voltage 3.000000 Read voltage 2.468333 PWM 564.0 ADC 551.0 (2.662)
Setting voltage to 3.5
Step 5 Set voltage 3.500000 Read voltage 2.952000 PWM 652.0 ADC 638.0 (3.153)
Setting voltage to 4.0
Step 6 Set voltage 4.000000 Read voltage 3.442000 PWM 741.0 ADC 727.0 (3.656)
Setting voltage to 4.5
Step 7 Set voltage 4.500000 Read voltage 3.925333 PWM 829.0 ADC 815.0 (4.153)
Setting voltage to 5.0
Step 8 Set voltage 5.000000 Read voltage 4.415000 PWM 918.0 ADC 0 (0)
Setting voltage to 5.5
sr: serial: Error setting serial port parameters (5): Input/output error.
No devices found.
Traceback (most recent call last):
  File "./calibrate.py", line 327, in <module>
    main()
  File "./calibrate.py", line 318, in main
    auto_calibration()
  File "./calibrate.py", line 248, in auto_calibration
    vout = dmm.sample3(3) # Use three samples
  File "./calibrate.py", line 182, in sample3
    s = self.sample1(count)
  File "./calibrate.py", line 169, in sample1
    data.append(self._sample())
  File "./calibrate.py", line 158, in _sample
    return float(s.split(' ')[1])
IndexError: list index out of range