Bangle is absolutely amazing product, Just wanted to know if i can get the hardware/Schematics reference files for the same. If yes where ?
Thanks in advance for all the replies
Hmm Bangle.JS is a DT NO1 F18 Outdoor-Sport Smartwatch from the shelf. Gordon has done many reverse engineering to make Espruino work on it. Browsing through the code you will find a lot details. The board file is a good starting point.
Hi! There's a page describing how everything is connected on the watch, including some shots of the PCB: https://www.espruino.com/Bangle.js+Technical
However as @MaBe says, because it's reverse engineered I don't have full schematics for it.
Thanks a lot @MaBe I shall surely go through it once.
Thank you @Gordon, must say Bangle.js is one of the best thing I have found on internet. Shall surely look more deeper into technical details.
Here you can find additional pictures of the PCB (equipped with the SWD debug port).
If I'm not mistaken, the solder joints seen on "Photo 10" are: GND, SWDIO, SWCLK, VCC (from left to right).
This FCC ID website is still lacking schematics though...
Some information from inspection and discovery on non-destructive tear-down I did quite a while ago (on a watch with piezo speaker). Note that the chip marked with 'Mag?' in the main shot on https://www.espruino.com/Bangle.js+Technical is the port expander. The Mag(netometer sensor) is the very small chip to its left with very few connections. Zoom into some of the pics, especially the one with the mirrored back, in which I marked some traces, mainly with + for Vcc, - for Ground, C for clock and D for data for the I2S. Port expander has still some unused extensions ;-) ... The first two pic shows IC identifications. The third one I used to follow the PCB traces on front and back. In any graphics editor take a line / dashed double arrow line and move it around to identify the same location on the front and back. I used that technique to follow the traces between the ICs as they go between front and back via the vias.
List of ICs
counter clock wise starting with nrf52932 (name/id details may slightly vary between individual watches / production batches):
nrf52832 pins and purpose
counter clock wise starting Left top in shot with pin 1, then Bottom, Right, Top, with GPIO (in/out) and usage (from bangle board .py file https://github.com/espruino/Espruino/blob/master/boards/BANGLEJS.py and inspecting watch / non-destructive tear-down):
uD831 IO Expander / Portexpander
The way it is wired up it looks like a NPX (ex Philips) PCAL6408A: Low-voltage translating, 8-bit I²C-bus/SMBus I/O expander. neg_INT pin as well as port P1..P4 pins 3..5 and 7 seem not to be connected and configuration / initialization state is 'Power-Up default' / reset default.
Address of IO Expander / Portexpander on I2S bus is 0x20- A(ddress) pin 16 input line grounded.
PortsBits (and pins) of IO Expander / Portexpander purpose and mask (according to wiring, bangle board .py file https://github.com/espruino/Espruino/blob/master/boards/BANGLEJS.py and .c code file https://github.com/espruino/Espruino/blob/master/libs/banglejs/jswrap_bangle.c ):
Thanks a lot @jcmb I shall surely go through it.
@allObjects I guess this information is completely sufficient. Thanks a lot.
Wow, thank you! I'll have to see about adding that to the Bangle.js technical page - thanks for the note about magnetometer/IO expander too - that makes a lot more sense :)
Updated / complemented posts #7 and #8 (Edit 2020.0715-2140).
@Gordon, Bangle board .py file https://github.com/espruino/Espruino/blob/master/boards/BANGLEJS.py includes incomplete/contradicting information in comments for the IO Extender Port assignments / usage. Working a second time thru the main board shows that he pin_led for the Heart Rate Monitor LED goes thru the K42 driver - makes more sense than my initial display based on the board file. (Btw, it would be nice to have also an .ioRd() like the .ioWr() to easily access the IO Expander. I tried to do with I2C1, but got varying values return that were inconclusive).
Thanks - just updated the comments (I think I was numbering some starting from 0 and some starting from 1!).
it would be nice to have also an .ioRd() like the .ioWr()
it would be nice to have also an .ioRd() like the .ioWr()
I don't believe the expander can be read from at all? There is actually an internal variable in Espruino containing the state of everything on the expander that I guess could be exposed, but I think its use is pretty limited.
Will look for this variable... because most certainly it is/has to be synced when using Bangle.ioWr().
Updated / complemented posts #7 and #8 (EDIT 2020.0719-1559):
Wow, that's great - thanks! And I can confirm, I've tried connecting power the wrong way and it doesn't destroy anything :)
Detail about KN6 (NPN) and K42 (PNP) transistor arrrays:
KN6 (NPN) transistor array bases for vibration motor and speaker are driven via current limiting resistors. K42 (pnp) transistor array bases for display back light and heart rate monitoring LED are direct driven by the IO extender port pins and have most likely an integrated resistor to limit base current and with that limiting the load on the IO extender output ports (pins) P5 (8) and P7 (10).
Typical to driver transistor arrays is the Base-Emitter resistor to shut the transistor on floating base. It is possible that both KN6 and K42 contain such resistors.
Details about pull-up resistors on buttons 1 trhu 3:
The three (3) resistors in upside-down of uppercase L layout 'above' the antenna / to the right and above the SJK 32.000 Xtal on the black flex cable connection side are pull-up resistors for the physical push buttons BTN1, BTN2 and BTN2. Their value is so high that touching the hot end with the probe of the multi meter for measuring the voltage has the same effect as briefly pushing the related button.
Don't worry about formatting, just type in the text and we'll take care of making sense of it. We will auto-convert links, and if you put asterisks around words we will make them bold.
For a full reference visit the Markdown syntax.
© Espruino, powered by microcosm.
Report a problem