W800_Smart_Watch/README.md
2023-01-05 13:45:51 +01:00

117 lines
5.6 KiB
Markdown

# W800_Smart_Watch
## Why this project :
I was interested in working on a bigger project with more challenges and which could be useful.
I am also quite unhappy with the smartwatches that are on the market (expensive, no access to the firmware, data collection and privacy issues), that's why I decided to try doing my own that I can fully customize. This is going to be a long adventure with a lot of discoveries along the way :).
I also wanted to test this W800 SOC more deeply and see what it could do and I think it perfectly fits the project.
So let's go !
## A Smart Watch project using the Chinese W800 SOC.
The W800 is a pretty interesting chip with impressive characteristics :
### Core :
* 32bit XT804 CPU
* 240 Mhz frequency
### Memory :
* 2 MB on chip flash
* 288 KB RAM
### Wireless connectivity :
* Bluetooth EDR(Classic) and BLE 4.2
* WiFi 2.4Ghz 802.11 b/g/n
## Sensors :
The goal is to embed the following sensors in the watch :
* An accelerometer (for wrist tilt detection, single and double tap detection , foot step counting and more)
Possible choices :
* ADXL345
* MPU6050
* BMI160
* LSM6DS3
* BMA456 <-- **SELECTED** i2c addr : 0x18 or 0x19 7 bit address, has the wrist tilt detection feature.
* A magnetometer (possible choices):
* HMC5883L <-- After reading some comparison articles between the HMC5883L and QMC5883L and the datasheets, the later seems better in term of perfomances.
* QMC5883L <-- **SELECTED** i2c addr : 0x0D 7 bit address, better soldering footprint
* LSM303DLHC
* BMM150 <-- Package with balls, hard to handle
* An air pressure/temperature sensor (to display the altitude for example)
* BMP280 <-- **SELECTED** i2c addr : 0x76 or 0x77
## Actuators :
* A vibration motor to notify events to the user.
* A piezo buzzer.
## Power source :
* 1 cell lipo battery.
* A charge controller.
## Screen + touch element :
* [Screen with touch](https://fr.aliexpress.com/item/1005004887834918.html?spm=a2g0o.order_list.order_list_main.22.340a5e5bX8WCb0&gatewayAdapt=glo2fra) : GC9A01 with touch panel. It uses the required 4 line Serial Interface.
* Touch element i2c addr : 0x15, CST816D I2C touch driver.
## MCU Pin assignement table :
| Pin Number | Pin Name | Type | Function | Pull UP/DOWN| Connected to | Comment |
|------------|----------|------|----------|-------------|--------------|---------|
||PB_20|I/O|**UART0_RX**/PWM1/UART1_CTS/I²C_SCL|U/D|**USB/Serial TX flash pin**||
||PB_19|I/O|**UART0_TX**/PWM0/UART1_RTS/**I²C_SDA**|U/D|**USB/Serial RX flash pin** and **BMA456, Touch Panel, HMC5883L and BMP280 SDA pins**||
||WAKEUP|I|**External Wake Up Pin**|D|**BMA456 IRQ line** and **Touch Panel IRQ line**|The chip is waken up when the pin is HIGH|
||RESET|I|Reset Pin|D|**Micro switch** and **USB/Serial RTS pin**||
||XTAL_OUT|O|External crystal output||||
||XTAL_IN|I|External crystal input||||
||AVDD3V3|P|Chip power supply, 3.3V||||
||ANT|I/O|RF Antenna||||
||AVDD3V3|P|Chip power supply, 3.3V||||
||AVDD3V3|P|Chip power supply, 3.3V|||
||AVDD3V3_AUX|P|Chip power supply, 3.3V||||
||TEST|I|Test function configuration pin||||
||BOOTMODE|I/O|BOOTMODE and I²S_MCLK/LSPI_CS/PWM2/I²S_DO|U/D|||
||PA_1|I/O|JTAG_CK/**I²C_SCL**/PWM3/I²S_LRCK/ADC0|U/D|**BMA456, Touch Panel, HMC5883L and BMP280 SCL pins**||
||PA_4|I/O|JTAG_SWO/I²C_SDA/PWM4/I²S_BCK/**ADC1**|U/D|**Battery resistor voltage divider output**||
||PA_7|I/O|**PWM4**/LSPI_MOSI/I²S_MCK/I²S_DI/Touch0|U/D|**LCD backlight N-MOSFET driver**||
||VDD3V3IO|P|IO power supply, 3.3V||||
||PB_0|**I/O**|PWM0/LSPI_MISO/UART3_TX/PSRAM_CK/Touch3|U/D|**Battery resistor voltage divider enable**||
||PB_1|**I/O**|PWM1/LSPI_CK/UART3_RX/PSRAM_CS/Touch4|U/D|**Touch Panel IRQ line**||
||PB_2|I/O|PWM2/LSPI_CK/**UART2_TX**/PSRAM_D0/Touch5|U/D|**Debug UART serial output**||
||PB_3|I/O|PWM3/LSPI_MISO/UART2_RX/PSRAM_D1/Touch6|U/D|||
||PB_4|I/O|LSPI_CS/UART2_RTS/UART4_TX/PSRAM_D2/Touch7|U/D|||
||PB_5|I/O|LSPI_MOSI/UART2_CTS/UART4_RX/PSRAM_D3/Touch8|U/D|||
||VDD3V3IO|P|IO power supply, 3.3V||||
||CAP|I|External capacitor, 4.7µF||||
||PB_6|I/O|UART1_TX/**MMC_CLK**/HSPI_CK/SDIO_CK/Touch9|U/D|**LCD Serial Clock Pin**||
||PB_7|I/O|UART1_RX/**MMC_CMD**/HSPI_INT/SDIO_CMD/Touch10|U/D|**LCD Serial Data Pin**||
||PB_8|**I/O**|I²S_BCK/MMC_D0/PWM_BREAK/SDIO_D0/Touch11|U/D|**LCD Data or Command Selection Pin**||
||PB_9|**I/O**|I²S_LRCK/MMC_D1/HSPI_CS/SDIO_D1/Touch12|U/D|**LCD Reset Pin**||
||PB_10|**I/O**|I²S_DI/MMC_D2/HSPI_DI/SDIO_D2|U/D|**LCD Chip Select Pin**||
||VDD3V3IO|P|IO power supply, 3.3V||||
||PB_11|I/O|I²S_DO/MMC_D3/HSPI_DO/SDIO_D3|U/D|||
||GND|P|Ground (Central Pad)||||
## What is done/working so far :
* LVGL 8.3.3 running on the SOC using DMA.
* Supported LCD drivers :
* ILI9341 in 4-line serial mode (8 bits) with D/C pin
* ST7789 in 4-line serial mode (8 bits) with D/C pin
* GC9A01 in 4-line serial mode (8 bits) with D/C pin
* Three screens designed and working with LVGL :
* 1 watch face based on a casio watch.
* 1 menu list screen with icons.
* 1 setting screen with basic settings (date and time + display brightness) (work in progress).
## To do :
* Write I2C drivers for the :
* [X] BMA456
* [X] Wrist tilt detection
* [ ] BMP280
* [X] Temperature
* [ ] Pressure
* [X] QMC5883L
* [X] Write the init sequence for the GC9A01 LCD driver.
* [X] Make LCD display + touch work.
* [ ] Finish to design the settings page.
* [ ] Test the charge circuit.
* [ ] Handle watch auto sleep feature with wake up on screen touch + wrist tilt.
* Design and test the :
* [ ] vibration moto circuit
* [ ] piezo buzzer circuit
* [ ] Draw the schematic.
* [ ] Design the PCB.