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

^ 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

{image: b3603-swim.jpg}

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

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

{image: control_pinouts.png}

* http://www.eevblog.com/forum/reviews/b3603-dcdc-buck-converter-mini-review-and-how-the-set-key-could-be-fatal/
* https://github.com/baruch/b3603
* http://www.banggood.com/DC-LED-Digital-Controlled-Step-Down-Driver-Power-Module-p-910096.html

^ 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

.pre
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

.pre

^ unprotect stm8 using stm8flash

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

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

^ compile

.pre
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/





.pre

^ flash

.pre
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

#



.pre

^ serial

.pre
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
.pre

.pre
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
.pre

^ calibrate

.pre
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


.pre