<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.pine64.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Avamander</id>
	<title>PINE64 - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.pine64.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Avamander"/>
	<link rel="alternate" type="text/html" href="https://wiki.pine64.org/wiki/Special:Contributions/Avamander"/>
	<updated>2026-04-06T09:09:04Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineTime_Hardware_Wishlist&amp;diff=15585</id>
		<title>PineTime Hardware Wishlist</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineTime_Hardware_Wishlist&amp;diff=15585"/>
		<updated>2023-01-15T14:42:54Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains a list of things people wish PineTime did differently&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
&lt;br /&gt;
* Other display technology could be explored.&lt;br /&gt;
** E-ink&lt;br /&gt;
*** Still images require no power to maintain&lt;br /&gt;
**[//en.Wikipedia.org/wiki/Transflective_liquid-crystal_display A transflective LCD]&lt;br /&gt;
*** Increased readability in bright daylight&lt;br /&gt;
**[//en.wikipedia.org/wiki/OLED OLED]&lt;br /&gt;
*** Self-emissive display (pixels emit their own light)&lt;br /&gt;
*** Allows for lower power usage with mostly black screens&lt;br /&gt;
*** Allows for low power visual notifications (imagine an always-on small red square in the corner to indicate a notification)&lt;br /&gt;
* Touchscreen with configurable sensitivity&lt;br /&gt;
** Ideal for gloved fingers and water droplet resistance&lt;br /&gt;
** Preferably it should remain capacitive, as a resistive touchscreen would have too many trade-offs.&lt;br /&gt;
* A slightly bigger 256×256 pixel display&lt;br /&gt;
** This resolution is preferable for its binary alignment for low-level simplicity&lt;br /&gt;
** It has the property that its X and Y coordinates are each addressable with a single byte, with no bounds checking&lt;br /&gt;
** Its total number of pixels is a power of 2 (65536), and each pixel is addressable with exactly 2 bytes.&lt;br /&gt;
** The [http://Pelulamu.net/ibniz IBNIZ (Ideally Bare Numeric Impression giZmo) virtual machine], designed for minimalist demoscene graphics, has chosen 256×256 for its virtual display specifically for code efficiency.&lt;br /&gt;
*** If PineTime also chose 256×256 then it would be a target platform for unclipped IBNIZ demoscene programmes, which would be really fun to play around with on one's wrist!&lt;br /&gt;
* Full screen refresh is very slow&lt;br /&gt;
** A full 16-bit redraw on the display takes at worst 120ms, which is 8Hz&lt;br /&gt;
** Modest optimization is possible by adopting 12-bit color&lt;br /&gt;
** A smooth scrolling/usage/animation experience would be 30Hz minimum, preferably 60hz&lt;br /&gt;
** Display redraw is currently bottlenecked by the nRF52832 maximum SPI clock (8MHz).&lt;br /&gt;
** The nRF528(33/40) has one high speed SPI master which supports 32MHz, still well below the ST7789 maximum&lt;br /&gt;
** Parallel data transfer could be an option, but using more GPIOs (which don't look available)&lt;br /&gt;
* Some sort of scroll wheel (and possibly button combination) would be nice as an additional input method&lt;br /&gt;
* Changed GPIO assignment so more functionality is available (i.e. NFC and VSYNC)&lt;br /&gt;
* Wireless charging, or Qi Charging capability&lt;br /&gt;
* Different MCU with more RAM and ROM, higher clock&lt;br /&gt;
** nRF5840 update&lt;br /&gt;
*** 32MHz HS SPI, QuadSPI&lt;br /&gt;
*** CryptoCell + Secure Key Storage&lt;br /&gt;
*** More RAM, a coprocessor&lt;br /&gt;
*** The possibility to expose USB through power pins&lt;br /&gt;
** Ox64/BL808&lt;br /&gt;
*** Open hardware RISC-V based MCU&lt;br /&gt;
*** Significant jump in performance&lt;br /&gt;
*** Significant jump in memory and storage, allowing for more features and better UI's&lt;br /&gt;
** Possibly a pre-certified MCU module with a ceramic antenna&lt;br /&gt;
* Version without sensors but maybe bigger battery&lt;br /&gt;
* Pins on the programmer connector to allow UART while developing (currently there is a TX test point on PCB). (Note: There's ARM SemiHosting, ITM and Segger RTT that fulfil this purpose for most)&lt;br /&gt;
* Connect SDO of ST7889 LCD controller to MCU&lt;br /&gt;
** Allows MCU to execute READ commands&lt;br /&gt;
** Possibility of leveraging ST7889 RAM to save MCU RAM?&lt;br /&gt;
* LCD must be centered on case. Currently is not and watchfaces seems different when clock is put on the other wrist.&lt;br /&gt;
* A NFC antenna around the case, connected to the NFC pins.&lt;br /&gt;
* Used sensors should be NDA-free and preferably also blob-free for easier development&lt;br /&gt;
** Possibly replace BMA421 accelerometer with a magnetometer + gyroscope + accelerometer combination&lt;br /&gt;
*** The BMA421 doesn't have a public datasheet&lt;br /&gt;
*** Special attention should be paid to advanced features, such as step counting integration or flick detection.&lt;br /&gt;
* PineTime SoC could support USB or have a FTDI chip with the relevant pins exposed&lt;br /&gt;
** It could allow flashing a sealed device, just like Arduinos work.&lt;br /&gt;
** Alternatively, an USB-C port could be added that provides these features. &lt;br /&gt;
* A bigger pulldown resistor for the power button&lt;br /&gt;
** 100k still leaks a noticeable amount of power when the button is always on.&lt;br /&gt;
* Ceramic Bluetooth antenna for better signal reception&lt;br /&gt;
* An external RTC circuit&lt;br /&gt;
** Allows the main MCU go to deep-sleep while retaining time.&lt;br /&gt;
** Allows time retention through MCU reset.&lt;br /&gt;
* Ultra low quiescent current PMIC&lt;br /&gt;
** In theory could provide a hard reset capability based on button press&lt;br /&gt;
** Better deep sleep/shipping/storage/off lifetime&lt;br /&gt;
*** A nano-power system timer IC could in theory provide a RTC, MOSFET-controlled deep sleep, watchdog timer and button-controlled reset&lt;br /&gt;
** Built-in &amp;quot;fuel gauge&amp;quot; for better estimation of battery capacity&lt;br /&gt;
* Improved haptic or audible feedback&lt;br /&gt;
** E.g. small Piezo buzzer&lt;br /&gt;
** Use case would be for very short beeps (think old-school casio watch) as notification.&lt;br /&gt;
** Of course developers can PWM other frequency to make it sing, but piezos tend to be shrill.&lt;br /&gt;
* A built-in microphone&lt;br /&gt;
** Would allow phone call functionality to be built into the watch.&lt;br /&gt;
** Could potentially allow for speech recognition for text input.&lt;br /&gt;
** Direct access to the external (flash) storage&lt;br /&gt;
** Only a small jump in price&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineTime_Hardware_Wishlist&amp;diff=15583</id>
		<title>PineTime Hardware Wishlist</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineTime_Hardware_Wishlist&amp;diff=15583"/>
		<updated>2023-01-15T14:07:23Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains a list of things people wish PineTime did differently&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
&lt;br /&gt;
* Other display technology could be explored.&lt;br /&gt;
** E-ink&lt;br /&gt;
*** Still images require no power to maintain&lt;br /&gt;
**[//en.Wikipedia.org/wiki/Transflective_liquid-crystal_display A transflective LCD]&lt;br /&gt;
*** Increased readability in bright daylight&lt;br /&gt;
**[//en.wikipedia.org/wiki/OLED OLED]&lt;br /&gt;
*** Self-emissive display (pixels emit their own light)&lt;br /&gt;
*** Allows for lower power usage with mostly black screens&lt;br /&gt;
*** Allows for low power visual notifications (imagine an always-on small red square in the corner to indicate a notification)&lt;br /&gt;
* Touchscreen with configurable sensitivity&lt;br /&gt;
** Ideal for gloved fingers and water droplet resistance&lt;br /&gt;
** Preferably it should remain capacitive, as a resistive touchscreen would have too many trade-offs.&lt;br /&gt;
* A slightly bigger 256×256 pixel display&lt;br /&gt;
** This resolution is preferable for its binary alignment for low-level simplicity&lt;br /&gt;
** It has the property that its X and Y coordinates are each addressable with a single byte, with no bounds checking&lt;br /&gt;
** Its total number of pixels is a power of 2 (65536), and each pixel is addressable with exactly 2 bytes.&lt;br /&gt;
** The [http://Pelulamu.net/ibniz IBNIZ (Ideally Bare Numeric Impression giZmo) virtual machine], designed for minimalist demoscene graphics, has chosen 256×256 for its virtual display specifically for code efficiency.&lt;br /&gt;
** If PineTime also chose 256×256 then it would be a target platform for unclipped IBNIZ demoscene programmes, which would be really fun to play around with on one's wrist!&lt;br /&gt;
* Full screen refresh is very slow&lt;br /&gt;
** A full 16-bit redraw on the display takes at worst 120ms, which is 8Hz&lt;br /&gt;
** Modest optimization is possible by adopting 12-bit color&lt;br /&gt;
** A smooth scrolling/usage/animation experience would be 30Hz minimum, preferably 60hz&lt;br /&gt;
** Display redraw is currently bottlenecked by the nRF52832 maximum SPI clock (8MHz).&lt;br /&gt;
** The nRF528(33/40) has one high speed SPI master which supports 32MHz, still well below the ST7789 maximum&lt;br /&gt;
** Parallel data transfer could be an option, but using more GPIOs (which don't look available)&lt;br /&gt;
* Some sort of scroll wheel (and possibly button combination) would be nice as an additional input method&lt;br /&gt;
* Changed GPIO assignment so more functionality is available (i.e. NFC and VSYNC)&lt;br /&gt;
* Wireless charging, or Qi Charging capability&lt;br /&gt;
* Different MCU with more RAM and ROM, higher clock&lt;br /&gt;
** nRF5840 update&lt;br /&gt;
*** 32MHz HS SPI, QuadSPI&lt;br /&gt;
*** CryptoCell + Secure Key Storage&lt;br /&gt;
*** More RAM, a coprocessor&lt;br /&gt;
*** The possibility to expose USB through power pins&lt;br /&gt;
** Ox64/BL808&lt;br /&gt;
*** Open hardware RISC-V based MCU&lt;br /&gt;
*** Significant jump in performance&lt;br /&gt;
*** Significant jump in memory and storage, allowing for more features and better UI's&lt;br /&gt;
** Possibly a pre-certified MCU module with a ceramic antenna&lt;br /&gt;
* Version without sensors but maybe bigger battery&lt;br /&gt;
* Pins on the programmer connector to allow UART while developing (currently there is a TX test point on PCB). (Note: There's ARM SemiHosting, ITM and Segger RTT that fulfil this purpose for most)&lt;br /&gt;
* Connect SDO of ST7889 LCD controller to MCU&lt;br /&gt;
** Allows MCU to execute READ commands&lt;br /&gt;
** Possibility of leveraging ST7889 RAM to save MCU RAM?&lt;br /&gt;
* LCD must be centered on case. Currently is not and watchfaces seems different when clock is put on the other wrist.&lt;br /&gt;
* A NFC antenna around the case, connected to the NFC pins.&lt;br /&gt;
* Used sensors should be NDA-free and preferably also blob-free for easier development&lt;br /&gt;
** Possibly replace BMA421 accelerometer with a magnetometer + gyroscope + accelerometer combination&lt;br /&gt;
*** The BMA421 doesn't have a public datasheet&lt;br /&gt;
*** Special attention should be paid to advanced features, such as step counting integration or flick detection.&lt;br /&gt;
* PineTime SoC could support USB or have a FTDI chip with the relevant pins exposed&lt;br /&gt;
** It could allow flashing a sealed device, just like Arduinos work.&lt;br /&gt;
** Alternatively, an USB-C port could be added that provides these features. &lt;br /&gt;
* A bigger pulldown resistor for the power button&lt;br /&gt;
** 100k still leaks a noticeable amount of power when the button is always on.&lt;br /&gt;
* Ceramic Bluetooth antenna for better signal reception&lt;br /&gt;
* An external RTC circuit&lt;br /&gt;
** Allows the main MCU go to deep-sleep while retaining time.&lt;br /&gt;
** Allows time retention through MCU reset.&lt;br /&gt;
* Ultra low quiescent current PMIC&lt;br /&gt;
** In theory could provide a hard reset capability based on button press&lt;br /&gt;
** Better deep sleep/shipping/storage/off lifetime&lt;br /&gt;
*** A nano-power system timer IC could in theory provide a RTC, MOSFET-controlled deep sleep, watchdog timer and button-controlled reset&lt;br /&gt;
** Built-in &amp;quot;fuel gauge&amp;quot; for better estimation of battery capacity&lt;br /&gt;
* Improved haptic or audible feedback&lt;br /&gt;
** E.g. small Piezo buzzer&lt;br /&gt;
** Use case would be for very short beeps (think old-school casio watch) as notification.&lt;br /&gt;
** Of course developers can PWM other frequency to make it sing, but piezos tend to be shrill.&lt;br /&gt;
* A built-in microphone&lt;br /&gt;
** Would allow phone call functionality to be built into the watch.&lt;br /&gt;
** Could potentially allow for speech recognition for text input.&lt;br /&gt;
** Direct access to the external (flash) storage&lt;br /&gt;
** Only a small jump in price&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineTime_Hardware_Wishlist&amp;diff=15582</id>
		<title>PineTime Hardware Wishlist</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineTime_Hardware_Wishlist&amp;diff=15582"/>
		<updated>2023-01-15T14:06:58Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains a list of things people wish PineTime did differently&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
&lt;br /&gt;
* Other display technology could be explored.&lt;br /&gt;
** E-ink&lt;br /&gt;
*** Still images require no power to maintain&lt;br /&gt;
**[//en.Wikipedia.org/wiki/Transflective_liquid-crystal_display A transflective LCD]&lt;br /&gt;
*** Increased readability in bright daylight&lt;br /&gt;
**[//en.wikipedia.org/wiki/OLED OLED]&lt;br /&gt;
*** Self-emissive display (pixels emit their own light)&lt;br /&gt;
*** Allows for lower power usage with mostly black screens&lt;br /&gt;
*** Allows for low power visual notifications (imagine an always-on small red square in the corner to indicate a notification)&lt;br /&gt;
* Touchscreen with configurable sensitivity&lt;br /&gt;
** Ideal for gloved fingers and water droplet resistance&lt;br /&gt;
** Preferably it should remain capacitive, as a resistive touchscreen would have too many trade-offs.&lt;br /&gt;
* A slightly bigger 256×256 pixel display&lt;br /&gt;
** This resolution is preferable for its binary alignment for low-level simplicity&lt;br /&gt;
** It has the property that its X and Y coordinates are each addressable with a single byte, with no bounds checking&lt;br /&gt;
** Its total number of pixels is a power of 2 (65536), and each pixel is addressable with exactly 2 bytes.&lt;br /&gt;
** The [http://Pelulamu.net/ibniz IBNIZ (Ideally Bare Numeric Impression giZmo) virtual machine], designed for minimalist demoscene graphics, has chosen 256×256 for its virtual display specifically for code efficiency.&lt;br /&gt;
** If PineTime also chose 256×256 then it would be a target platform for unclipped IBNIZ demoscene programmes, which would be really fun to play around with on one's wrist!&lt;br /&gt;
* Full screen refresh is very slow&lt;br /&gt;
** A full 16-bit redraw on the display takes at worst 120ms, which is 8Hz&lt;br /&gt;
** Modest optimization is possible by adopting 12-bit color&lt;br /&gt;
** A smooth scrolling/usage/animation experience would be 30Hz minimum, preferably 60hz&lt;br /&gt;
** Display redraw is currently bottlenecked by the nRF52832 maximum SPI clock (8MHz).&lt;br /&gt;
** The nRF528(33/40) has one high speed SPI master which supports 32MHz, still well below the ST7789 maximum&lt;br /&gt;
** Parallel data transfer could be an option, but using more GPIOs (which don't look available)&lt;br /&gt;
* Some sort of scroll wheel (and possibly button combination) would be nice as an additional input method&lt;br /&gt;
* Changed GPIO assignment so more functionality is available (i.e. NFC and VSYNC)&lt;br /&gt;
* Wireless charging, or Qi Charging capability&lt;br /&gt;
* Different MCU with more RAM and ROM, higher clock&lt;br /&gt;
** nRF5840 update&lt;br /&gt;
*** 32MHz HS SPI, QuadSPI&lt;br /&gt;
*** CryptoCell + Secure Key Storage&lt;br /&gt;
*** More RAM, a coprocessor&lt;br /&gt;
*** The possibility to expose USB through power pins&lt;br /&gt;
** Ox64/BL808&lt;br /&gt;
*** Open hardware RISC-V based MCU&lt;br /&gt;
*** Significant jump in performance&lt;br /&gt;
*** Significant jump in memory and storage, allowing for more features and better UI's&lt;br /&gt;
* Preferably a pre-certified MCU module with a ceramic antenna&lt;br /&gt;
* Version without sensors but maybe bigger battery&lt;br /&gt;
* Pins on the programmer connector to allow UART while developing (currently there is a TX test point on PCB). (Note: There's ARM SemiHosting, ITM and Segger RTT that fulfil this purpose for most)&lt;br /&gt;
* Connect SDO of ST7889 LCD controller to MCU&lt;br /&gt;
** Allows MCU to execute READ commands&lt;br /&gt;
** Possibility of leveraging ST7889 RAM to save MCU RAM?&lt;br /&gt;
* LCD must be centered on case. Currently is not and watchfaces seems different when clock is put on the other wrist.&lt;br /&gt;
* A NFC antenna around the case, connected to the NFC pins.&lt;br /&gt;
* Used sensors should be NDA-free and preferably also blob-free for easier development&lt;br /&gt;
** Possibly replace BMA421 accelerometer with a magnetometer + gyroscope + accelerometer combination&lt;br /&gt;
*** The BMA421 doesn't have a public datasheet&lt;br /&gt;
*** Special attention should be paid to advanced features, such as step counting integration or flick detection.&lt;br /&gt;
* PineTime SoC could support USB or have a FTDI chip with the relevant pins exposed&lt;br /&gt;
** It could allow flashing a sealed device, just like Arduinos work.&lt;br /&gt;
** Alternatively, an USB-C port could be added that provides these features. &lt;br /&gt;
* A bigger pulldown resistor for the power button&lt;br /&gt;
** 100k still leaks a noticeable amount of power when the button is always on.&lt;br /&gt;
* Ceramic Bluetooth antenna for better signal reception&lt;br /&gt;
* An external RTC circuit&lt;br /&gt;
** Allows the main MCU go to deep-sleep while retaining time.&lt;br /&gt;
** Allows time retention through MCU reset.&lt;br /&gt;
* Ultra low quiescent current PMIC&lt;br /&gt;
** In theory could provide a hard reset capability based on button press&lt;br /&gt;
** Better deep sleep/shipping/storage/off lifetime&lt;br /&gt;
*** A nano-power system timer IC could in theory provide a RTC, MOSFET-controlled deep sleep, watchdog timer and button-controlled reset&lt;br /&gt;
** Built-in &amp;quot;fuel gauge&amp;quot; for better estimation of battery capacity&lt;br /&gt;
* Improved haptic or audible feedback&lt;br /&gt;
** E.g. small Piezo buzzer&lt;br /&gt;
** Use case would be for very short beeps (think old-school casio watch) as notification.&lt;br /&gt;
** Of course developers can PWM other frequency to make it sing, but piezos tend to be shrill.&lt;br /&gt;
* A built-in microphone&lt;br /&gt;
** Would allow phone call functionality to be built into the watch.&lt;br /&gt;
** Could potentially allow for speech recognition for text input.&lt;br /&gt;
** Direct access to the external (flash) storage&lt;br /&gt;
** Only a small jump in price&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineTime_Hardware_Wishlist&amp;diff=14705</id>
		<title>PineTime Hardware Wishlist</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineTime_Hardware_Wishlist&amp;diff=14705"/>
		<updated>2022-11-16T23:05:01Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains a list of things people wish PineTime did differently&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
&lt;br /&gt;
* Long pressing the button should power-cycle the watch without any software being involved&lt;br /&gt;
* Other display technology could be explored.&lt;br /&gt;
** E-ink&lt;br /&gt;
*** Still images require no power to maintain&lt;br /&gt;
**[//en.Wikipedia.org/wiki/Transflective_liquid-crystal_display A transflective LCD]&lt;br /&gt;
*** Increased readability in bright daylight&lt;br /&gt;
**[//en.wikipedia.org/wiki/OLED OLED]&lt;br /&gt;
*** Self-emissive display (pixels emit their own light)&lt;br /&gt;
*** Allows for lower power usage with mostly black screens&lt;br /&gt;
*** Allows for low power visual notifications (imagine an always-on small red square in the corner to indicate a notification)&lt;br /&gt;
* Touchscreen with configurable sensitivity&lt;br /&gt;
** Ideal for gloved fingers and water droplet resistance&lt;br /&gt;
** Preferably it should remain capacitive, as a resistive touchscreen would have too many trade-offs.&lt;br /&gt;
* A slightly bigger 256×256 pixel display&lt;br /&gt;
** This resolution is preferable for its binary alignment for low-level simplicity&lt;br /&gt;
** It has the property that its X and Y coordinates are each addressable with a single byte, with no bounds checking&lt;br /&gt;
** Its total number of pixels is a power of 2 (65536), and each pixel is addressable with exactly 2 bytes.&lt;br /&gt;
** The [http://Pelulamu.net/ibniz IBNIZ (Ideally Bare Numeric Impression giZmo) virtual machine], designed for minimalist demoscene graphics, has chosen 256×256 for its virtual display specifically for code efficiency.&lt;br /&gt;
** If PineTime also chose 256×256 then it would be a target platform for unclipped IBNIZ demoscene programmes, which would be really fun to play around with on one's wrist!&lt;br /&gt;
* Full screen refresh is very slow&lt;br /&gt;
** A full 16-bit redraw on the display takes at worst 120ms, which is 8Hz&lt;br /&gt;
** Modest optimization is possible by adopting 12-bit color&lt;br /&gt;
** A smooth scrolling/usage/animation experience would be 30Hz minimum, preferably 60hz&lt;br /&gt;
** Display redraw is currently bottlenecked by the nRF52832 maximum SPI clock (8MHz).&lt;br /&gt;
** The nRF528(33/40) has one high speed SPI master which supports 32MHz, still well below the ST7789 maximum&lt;br /&gt;
** Parallel data transfer could be an option, but using more GPIOs (which don't look available)&lt;br /&gt;
* Some sort of scroll wheel would be nice for convenience.&lt;br /&gt;
* Changed GPIO assignment so more functionality is available (i.e. NFC and VSYNC)&lt;br /&gt;
* Wireless charging, or Qi Charging capability&lt;br /&gt;
* Different MCU with more RAM and ROM, higher clock&lt;br /&gt;
** nRF5840 update&lt;br /&gt;
*** 32MHz HS SPI, QuadSPI&lt;br /&gt;
*** CryptoCell + Secure Key Storage&lt;br /&gt;
*** More RAM, a coprocessor&lt;br /&gt;
*** The possibility to expose USB through power pins&lt;br /&gt;
** Ox64/BL808&lt;br /&gt;
*** Open hardware RISC-V based MCU&lt;br /&gt;
*** Significant jump in performance&lt;br /&gt;
*** Significant jump in memory and storage, allowing for more features and better UI's&lt;br /&gt;
* Preferably a pre-certified MCU module with a ceramic antenna&lt;br /&gt;
* Version without sensors but maybe bigger battery&lt;br /&gt;
* Pins on the programmer connector to allow UART while developing (currently there is a TX test point on PCB). (Note: There's ARM SemiHosting, ITM and Segger RTT)&lt;br /&gt;
* Connect SDO of ST7889 LCD controller to MCU.&lt;br /&gt;
** Allows MCU to execute READ commands&lt;br /&gt;
** Possibility of leveraging ST7889 RAM to save MCU RAM?&lt;br /&gt;
* LCD must be centered on case. Currently is not and watchfaces seems different when clock is put on the other wrist.&lt;br /&gt;
* A NFC antenna around the case, connected to the NFC pins.&lt;br /&gt;
* Used sensors should be NDA-free and preferably also blob-free for easier development&lt;br /&gt;
** Possibly replace BMA421 accelerometer&lt;br /&gt;
*** The BMA421 doesn't have a public datasheet&lt;br /&gt;
*** Special attention should be paid to advanced features, such as step counting integration or flick detection.&lt;br /&gt;
* PineTime SoC could support USB or have a FTDI chip with the relevant pins exposed.&lt;br /&gt;
** It could allow flashing a sealed device, just like Arduinos work.&lt;br /&gt;
** Alternatively, an USB-C port could be added that provides these features. &lt;br /&gt;
* A bigger pulldown resistor for the power button&lt;br /&gt;
** 100k still leaks a noticeable amount of power when the button is always on.&lt;br /&gt;
* Ceramic Bluetooth antenna for better signal reception&lt;br /&gt;
* An external RTC circuit&lt;br /&gt;
** Allows the main MCU go to deep-sleep while retaining time.&lt;br /&gt;
** Allows time retention through MCU reset.&lt;br /&gt;
* Ultra low quiescent current PMIC&lt;br /&gt;
** In theory could provide a hard reset capability based on button press&lt;br /&gt;
** Better deep sleep/shipping/storage/off lifetime&lt;br /&gt;
*** A nano-power system timer IC could in theory provide a RTC, MOSFET-controlled deep sleep, watchdog timer and button-controlled reset&lt;br /&gt;
** Built-in &amp;quot;fuel gauge&amp;quot; for better estimation of battery capacity&lt;br /&gt;
* Improved haptic or audible feedback&lt;br /&gt;
** E.g. small Piezo buzzer&lt;br /&gt;
** Use case would be for very short beeps (think old-school casio watch) as notification.&lt;br /&gt;
** Of course developers can PWM other frequency to make it sing, but piezos tend to be shrill.&lt;br /&gt;
* A built-in microphone&lt;br /&gt;
** Would allow phone call functionality to be built into the watch.&lt;br /&gt;
** Could potentially allow for speech recognition for text input.&lt;br /&gt;
** Direct access to the external (flash) storage&lt;br /&gt;
** Only a small jump in price&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineTime&amp;diff=12181</id>
		<title>PineTime</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineTime&amp;diff=12181"/>
		<updated>2022-01-05T22:51:58Z</updated>

		<summary type="html">&lt;p&gt;Avamander: /* Companion Apps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Pinetime.png|400px|thumb|right|The PineTime]]&lt;br /&gt;
&lt;br /&gt;
The '''PineTime''' is a free and open source smartwatch capable of running custom-built open operating systems. Some of the notable features include a heart rate monitor, a week-long battery, and a capacitive touch IPS display that is legible in direct sunlight. It is a fully community driven side-project which anyone can contribute to, allowing you to keep control of your device.&lt;br /&gt;
&lt;br /&gt;
== Frequently asked questions / Getting started ==&lt;br /&gt;
&lt;br /&gt;
'''Read these first!'''&lt;br /&gt;
&lt;br /&gt;
* [[Upgrade PineTime to InfiniTime 1.0.0|Upgrading your new PineTime to InfiniTime 1.0.0]]&lt;br /&gt;
* [[PineTime FAQ| Frequently Asked Questions about the PineTime]]&lt;br /&gt;
* [[PineTime Devkit Wiring]]&lt;br /&gt;
* [[Reprogramming the PineTime|Reprogramming the PineTime (development kit)]]&lt;br /&gt;
* [[Switching your PineTime between InfiniTime and Wasp-os]]&lt;br /&gt;
&lt;br /&gt;
== Default OS ==&lt;br /&gt;
&lt;br /&gt;
The current default operating system on the PineTime is called [[InfiniTime]], you can find more information about the firmware on its GitHub page. First devkits shipped with a proprietary custom firmware.&lt;br /&gt;
&lt;br /&gt;
You can find a list of available firmware and other software here: [[PineTime Development]]&lt;br /&gt;
&lt;br /&gt;
== Companion Apps ==&lt;br /&gt;
&lt;br /&gt;
PineTime/InfiniTime needs a companion app to e.g. upload a firmware, get notifications from a phone, or just get the date/time.   &lt;br /&gt;
Here are some companion apps:&lt;br /&gt;
&lt;br /&gt;
* [https://www.gadgetbridge.org Gadgetbridge] (Android &amp;gt;= 4.4) - Companion mobile app, supports updating firmware/bootloader, send notifications, etc.&lt;br /&gt;
* [https://openrepos.net/content/piggz/amazfish Amazfish] (SailfishOS and Linux) - Companion mobile and desktop app, supports updating firmware/bootloader, send notifications, etc.&lt;br /&gt;
* [https://github.com/alexr4535/siglo Siglo] (Linux) - Companion desktop app.&lt;br /&gt;
* [https://github.com/ZephyrLabs/PinetimeFlasher PinetimeFlasher] (Windows) - Companion desktop app, only supports flashing firmware.&lt;br /&gt;
* [https://apps.apple.com/us/app/nrf-connect-for-mobile/id1054362403 nRFConnect] (iOS) - Only supports flashing firmware.&lt;br /&gt;
* [https://github.com/xan-m/InfiniLink InfiniLink] (iOS) - Companion mobile app in development. Supports updating firmware/bootloader, setting date and time, Apple Music controls, and battery and heart rate data.&lt;br /&gt;
* [https://gitea.arsenm.dev/Arsen6331/itd itd] (Linux)&lt;br /&gt;
&lt;br /&gt;
== Short overview  / Specifications ==&lt;br /&gt;
'''Dimensions:''' 37.5 x 40 x 11mm &amp;lt;br&amp;gt;&lt;br /&gt;
'''Weight:''' 38 grams &amp;lt;br&amp;gt;&lt;br /&gt;
'''IP Rating:''' IP67 (waterproof to 1 meter (sealed edition!)) &amp;lt;br&amp;gt;&lt;br /&gt;
'''Display:'''&lt;br /&gt;
: '''Size:''' 1.3 inches (33mm) diagonal&lt;br /&gt;
: '''Type:''' IPS capacitive touchscreen, RGB 65K colors&lt;br /&gt;
: '''Display Controller:''' ST7789&lt;br /&gt;
: '''Resolution:''' 240x240 pixels &amp;lt;br&amp;gt;&lt;br /&gt;
'''System on Chip:''' Nordic Semiconductor nRF52832 &amp;lt;br&amp;gt;&lt;br /&gt;
'''Flash:''' 512KB with additional 4MB SPI NOR &amp;lt;br&amp;gt;&lt;br /&gt;
'''RAM:''' 64KB &amp;lt;br&amp;gt;&lt;br /&gt;
'''Bluetooth:''' [[PineTime_Bluetooth|5.0 (including Bluetooth Low Energy)]] &amp;lt;br&amp;gt;&lt;br /&gt;
'''Sensors:''' Accelerometer, Heart rate sensor &amp;lt;br&amp;gt;&lt;br /&gt;
'''Feedback:''' Vibration motor &amp;lt;br&amp;gt;&lt;br /&gt;
'''Battery:''' 170-180mAh 3.8V LiPo&lt;br /&gt;
&lt;br /&gt;
= Community =&lt;br /&gt;
&lt;br /&gt;
== Forum ==&lt;br /&gt;
* [https://forum.pine64.org/forumdisplay.php?fid=134 PineTime forum]&lt;br /&gt;
&lt;br /&gt;
== Chat ==&lt;br /&gt;
* [https://app.element.io/#/room/#pinetime:matrix.org Matrix Channel] (No login required to read)&lt;br /&gt;
* IRC Server: [ircs://irc.pine64.org#pinetime irc.pine64.org] Channel: PineTime&lt;br /&gt;
* [https://t.me/pinetime Telegram group]&lt;br /&gt;
* [https://discordapp.com/invite/DgB7kzr Discord server invite link]&lt;br /&gt;
&lt;br /&gt;
=== Developers and coding ===&lt;br /&gt;
* [https://app.element.io/#/room/#pinetime-dev:matrix.org Matrix Channel] (No login required to read)&lt;br /&gt;
* [https://t.me/pinetime_dev Telegram group]&lt;br /&gt;
* [https://discordapp.com/invite/DgB7kzr Discord server invite link]&lt;br /&gt;
&lt;br /&gt;
== Development efforts ==&lt;br /&gt;
&lt;br /&gt;
To read more about development on the PineTime, the projects available and more technical details, check out [[PineTime Development]]&lt;br /&gt;
&lt;br /&gt;
== Useful articles and blog posts == &lt;br /&gt;
&lt;br /&gt;
If you want to dive in to the ecosystem, here's a short list of various articles and blog posts that can help you set up your soft- or hardware development environment.&lt;br /&gt;
&lt;br /&gt;
* [https://www.ncartron.org/one-week-with-my-pinetime---a-feedback.html Using the PineTime in production (January 2021)]&lt;br /&gt;
* [https://lupyuen.github.io/articles/sneak-peek-of-pinetime-smart-watch-and-why-its-perfect-for-teaching-iot Sneak Peek of PineTime Smart Watch… And why it’s perfect for teaching IoT]&lt;br /&gt;
* [https://lupyuen.github.io/articles/building-a-rust-driver-for-pinetimes-touch-controller Building a Rust Driver for PineTime’s Touch Controller]&lt;br /&gt;
* [https://lupyuen.github.io/articles/porting-druid-rust-widgets-to-pinetime-smart-watch Porting (druid) Rust Widgets to PineTime Smart Watch]&lt;br /&gt;
* [https://lupyuen.github.io/articles/optimising-pinetimes-display-driver-with-rust-and-mynewt Optimising PineTime’s Display Driver with Rust and Mynewt]&lt;br /&gt;
* [https://electronut.in/getting-started-with-zephyr-rtos-on-nordic-nrf52832-hackable/ Getting Started with Zephyr RTOS on Nordic nRF52832 hackaBLE]&lt;br /&gt;
* [https://blog.aegrel.ee/absniffer-cmsis-dap-sniffer.html Removing the lock and installing another firmware on the nRF52832 using CMSIS-DAP dongle on Linux]&lt;br /&gt;
* [https://github.com/JF002/nrf52-baseproject/wiki/Build,-program-and-debug-NRF52-project-with-JLink,-CMake-and-CLion Build, program and debug NRF52 project with JLink, CMake and CLion]&lt;br /&gt;
* [https://www.nrbtech.io/blog/2020/1/4/using-clion-for-nordic-nrf52-projects Using CLion for Nordic nRF52 projects]&lt;br /&gt;
* [https://dev.to/aaronc81/flashing-your-pinetime-using-an-st-link-and-openocd-54dd Flashing your PineTime using an ST-Link and OpenOCD]&lt;br /&gt;
* [https://zephyrlabs.github.io/Watchfaces/ Zephyrlabs: just a bunch of watchfaces made for the pinetime]&lt;br /&gt;
* [https://pankajraghav.com/2021/04/03/PINETIME-STOPCLOCK.html Creating a stopwatch in Pinetime (with Infinitime)]&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
== Display ==&lt;br /&gt;
&lt;br /&gt;
Note: The factory-default software on the PineTime does not auto-detect the display being disconnected when it has already booted. That can cause garbled output, to fix it just restart the PineTime.&lt;br /&gt;
&lt;br /&gt;
The display is driven using the ST7789 display controller. Use the following pins to drive the screen:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PineTime pin&lt;br /&gt;
! ST7789 pin&lt;br /&gt;
|-&lt;br /&gt;
| LCD_SCK (P0.02)&lt;br /&gt;
| SPI clock&lt;br /&gt;
|-&lt;br /&gt;
| LCD_SDI (P0.03)&lt;br /&gt;
| SPI MOSI&lt;br /&gt;
|-&lt;br /&gt;
| LCD_RS (P0.18)&lt;br /&gt;
| Command/Data pin (CD)&lt;br /&gt;
|-&lt;br /&gt;
| LCD_CS (P0.25)&lt;br /&gt;
| Chip select&lt;br /&gt;
|-&lt;br /&gt;
| LCD_RESET (P0.26)&lt;br /&gt;
| Display reset&lt;br /&gt;
|-&lt;br /&gt;
| LCD_BACKLIGHT_{LOW,MID,HIGH}&lt;br /&gt;
| Backlight (active low)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
&lt;br /&gt;
* Chip select must be held low while driving the display. It must be high when using other SPI devices on the same bus (such as external flash storage) so that the display controller won't respond to the wrong commands.&lt;br /&gt;
* SPI must be used in mode 3. Mode 0 (the default) won't work.&lt;br /&gt;
* LCD_DISPLAY_* is used to enable the backlight. Set at least one to low to see anything on the screen.&lt;br /&gt;
* Use SPI at 8MHz (the fastest clock available on the nRF52832) because otherwise refreshing will be super slow.&lt;br /&gt;
&lt;br /&gt;
'''References''':&lt;br /&gt;
&lt;br /&gt;
[https://github.com/adafruit/Adafruit-ST7735-Library/ Adafruit ST7789 driver in cpp]&lt;br /&gt;
&lt;br /&gt;
== Battery measurement ==&lt;br /&gt;
&lt;br /&gt;
Reading whether the PineTime has power attached is easy: simply read the charge indication pin (P0.12). When it is high it is running on battery, when it is low it is charging.&lt;br /&gt;
&lt;br /&gt;
Reading the battery voltage is a bit harder. For that you can use the battery voltage pin on P0.31 (AIN7). The returned value is 12 bits, which means it is 0..4095. You can get the measured voltage with the following formula, assuming a reference voltage of 3.3V (this is configurable in the ADC):&lt;br /&gt;
&lt;br /&gt;
 adcVoltage = adcValue / (4095 / 3.3)&lt;br /&gt;
&lt;br /&gt;
The measured voltage is actually half of the actual battery voltage, because the ADC is connected between a voltage divider where both resistors are 1MΩ. This can be corrected by multiplying the value:&lt;br /&gt;
&lt;br /&gt;
 batteryVoltage = adcValue * 2 / (4095 / 3.3)&lt;br /&gt;
&lt;br /&gt;
It's often better to avoid floating point values on embedded systems and in this case there is no reason to use float at all, we can just represent the value in millivolts. Therefore the formula can be simplified to:&lt;br /&gt;
&lt;br /&gt;
 batteryVoltage = adcValue * 2000 / (4095 / 3.3)&lt;br /&gt;
 batteryVoltage = adcValue * 2000 / 1241&lt;br /&gt;
&lt;br /&gt;
Converting this voltage to an estimated capacity in percent requires a more complicated algorithm, because Lithium-ion batteries have a non-linear discharge curve.&lt;br /&gt;
&lt;br /&gt;
== Button ==&lt;br /&gt;
&lt;br /&gt;
The button on the side of the PineTime is disabled by default. To enable it, drive the button out pin (P0.15) high.&lt;br /&gt;
&lt;br /&gt;
While enabled, the button in pin (P0.13) will be high when the button is pressed, and low when it is not pressed.&lt;br /&gt;
&lt;br /&gt;
== Touch panel ==&lt;br /&gt;
&lt;br /&gt;
The touch panel is controlled by a Hynitron CST816S chips. Unfortunately, there is not much information about this chip on the internet apart from the datasheet below and a [https://github.com/lupyuen/hynitron_i2c_cst0xxse/ reference driver]. This is enough to implement a basic driver, but crucial information needed to implement advanced functionalities are missing (I²C protocol and registers, timings, power modes,...).&lt;br /&gt;
&lt;br /&gt;
=== Pins ===&lt;br /&gt;
&lt;br /&gt;
* P0.10 : Reset&lt;br /&gt;
* P0.28 : Interrupt (signal to the CPU when a touch event is detected)&lt;br /&gt;
* P0.06 : I²C SDA&lt;br /&gt;
* P0.07 : I²C SCL&lt;br /&gt;
&lt;br /&gt;
=== I²C ===&lt;br /&gt;
&lt;br /&gt;
* Device address : 0x15&lt;br /&gt;
* Frequency : from 10Khz to 400Khz&lt;br /&gt;
&lt;br /&gt;
'''NOTE: ''' The controller go to sleep when no event is detected. In sleep mode, the controller does not communicate on the I²C bus (it appears disconnected). So, for the communication to work, you need to tap on the screen so that the chip wakes-up.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: ''' The I²C bus, also known as TWI bus has known issues, make sure to write your TWI driver with timeouts.&lt;br /&gt;
&lt;br /&gt;
=== Touch events ===&lt;br /&gt;
&lt;br /&gt;
Touch information is available from the 63 first registers of the controller. Remember: the device is in sleep mode when no touch event is detected. It means that you can read the register only when the touch controller detected an event. You can use the ''Interrupt'' pin to detect such event in the software. &lt;br /&gt;
&lt;br /&gt;
These 63 bytes contain up to 10 touch point (X, Y, event type, pressure,...) : &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Bit7&lt;br /&gt;
! Bit6&lt;br /&gt;
! Bit5&lt;br /&gt;
! Bit4&lt;br /&gt;
! Bit3&lt;br /&gt;
! Bit2&lt;br /&gt;
! Bit1&lt;br /&gt;
! Bit0&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|colspan=&amp;quot;8&amp;quot;|?&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|colspan=&amp;quot;8&amp;quot;|GestureID : (Gesture code ,&lt;br /&gt;
&lt;br /&gt;
0x00: no gesture,&lt;br /&gt;
&lt;br /&gt;
0x01: Slide down,&lt;br /&gt;
&lt;br /&gt;
0x02: Slide up,&lt;br /&gt;
&lt;br /&gt;
0x03: Slide left,&lt;br /&gt;
&lt;br /&gt;
0x04: Slide right,&lt;br /&gt;
&lt;br /&gt;
0x05: Single click,&lt;br /&gt;
&lt;br /&gt;
0x0B: Double click,&lt;br /&gt;
&lt;br /&gt;
0x0C: Long press) &lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;|? &lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;|Number of touch points &lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|Event (0 = Down, 1 = Up, 2 = Contact)&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|?&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;|X (MSB) coordinate&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|colspan=&amp;quot;8&amp;quot;|X (LSB) coordinate&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|?&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|Touch ID&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;|Y (MSB) coordinate&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|colspan=&amp;quot;8&amp;quot;|Y (LSB) coordinate&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|colspan=&amp;quot;8&amp;quot;|Pressure (?)&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|colspan=&amp;quot;8&amp;quot;|Miscellaneous (?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bytes 3 to 8 are repeated 10 times (10*6 + 3 = 63 bytes).&lt;br /&gt;
&lt;br /&gt;
'''NOTES'''&lt;br /&gt;
&lt;br /&gt;
* The touch controller seems to report only 1 touch point&lt;br /&gt;
* Fields X, Y, Number of touch points and touch ID are updated. The others are always 0.&lt;br /&gt;
&lt;br /&gt;
=== Registers ===&lt;br /&gt;
&lt;br /&gt;
The reference driver specifies some registers and value, but there is no information about them: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
!Register&lt;br /&gt;
!Address&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_INT_CNT&lt;br /&gt;
|0x8F&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_FLOW_WORK_CNT&lt;br /&gt;
|0x91&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_WORKMODE &lt;br /&gt;
|0x00&lt;br /&gt;
|0 = WORK, 0x40 = FACTORY&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_CHIP_ID&lt;br /&gt;
|0xA3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_CHIP_ID2&lt;br /&gt;
|0x9F&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_POWER_MODE&lt;br /&gt;
|0xA5&lt;br /&gt;
|0x03 = SLEEP (reset the touchpanel using the reset pin before using this register : pin_low, delay 5ms, pin_high, delay 50ms then write 3 to register 0xA5)&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_FW_VER&lt;br /&gt;
|0xA6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_VENDOR_ID&lt;br /&gt;
|0xA8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_LCD_BUSY_NUM&lt;br /&gt;
|0xAB&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_FACE_DEC_MODE_EN&lt;br /&gt;
|0xB0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_GLOVE_MODE_EN&lt;br /&gt;
|0xC0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_COVER_MODE_EN&lt;br /&gt;
|0xC1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_CHARGER_MODE_EN&lt;br /&gt;
|0x8B&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_GESTURE_EN&lt;br /&gt;
|0xD0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_GESTURE_OUTPUT_ADDRESS&lt;br /&gt;
|0xD3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_ESD_SATURATE 0xED&lt;br /&gt;
|0xED&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''WARNING : ''' &amp;lt;del&amp;gt;Writing the SLEEP command (write 0x05 in HYN_REG_POWER_MODE) seems to freeze the controller (it returns only static values) until the battery is totally drained and the whole system reset. Analysis and debugging is more than welcome!&amp;lt;/del&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Accelerometer==&lt;br /&gt;
The on board accelerometer in devices shipped before July 2021 is a Bosch BMA421, connected to the I2C bus.&lt;br /&gt;
Devices shipped after July 2021 use a Bosch BMA425 accelerometer.&lt;br /&gt;
&lt;br /&gt;
=== Pins ===&lt;br /&gt;
&lt;br /&gt;
* P0.06 : I²C SDA&lt;br /&gt;
* P0.07 : I²C SCL&lt;br /&gt;
* P0.08 : Interrupt&lt;br /&gt;
&lt;br /&gt;
I2C Device address : 0x18&lt;br /&gt;
&lt;br /&gt;
= Datasheets and Schematics =&lt;br /&gt;
&lt;br /&gt;
== Schematics ==&lt;br /&gt;
* [https://files.pine64.org/doc/PineTime/PineTime%20Schematic-V1.0a-20191103.pdf PineTime Schematic ver1.0a]&lt;br /&gt;
* [https://files.pine64.org/doc/PineTime/PineTime%20Port%20Assignment%20rev1.0.pdf PineTime GPIO Port Assignment ver1.0]&lt;br /&gt;
&lt;br /&gt;
Note: The part number for the SPI FLASH in the schematic diagram is not correct, the PineTime features a larger external FLASH device, see below.&lt;br /&gt;
&lt;br /&gt;
== Chip Datasheets ==&lt;br /&gt;
* NORDIC nRF52832 information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinetime/nRF52832%20product%20brief.pdf nRF52832 Product Brief]&lt;br /&gt;
** [https://infocenter.nordicsemi.com/pdf/nRF52832_PS_v1.4.pdf nRF52832 Product Specification v1.4]&lt;br /&gt;
* ARMv7-M information:&lt;br /&gt;
** [https://static.docs.arm.com/ddi0403/eb/DDI0403E_B_armv7m_arm.pdf ARMv7-M Architecture Reference Manual]&lt;br /&gt;
&lt;br /&gt;
== Component Datasheets ==&lt;br /&gt;
* PMU (Power Management Unit) information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinetime/SGM40561.pdf SGMicro SGM40561 Single Cell Charger Datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinetime/SGMICRO-SGM2036.pdf SGMicro SGM2036 3.3V Low Power Low Dropout RF Linear Regulator Datasheet]&lt;br /&gt;
* SPI Flash information:&lt;br /&gt;
** [https://www.elnec.com/en/device/XTX/XT25F32B+%28QuadSPI%29+%5BSOP8-200%5D/ XTX XT25F32B 32Mb(4MB) SPI NOR Flash] (data sheets for this part are hard to find but it acts similar to other QuadSPI SPI NOR Flash such as [https://www.macronix.com/Lists/Datasheet/Attachments/7426/MX25L3233F,%203V,%2032Mb,%20v1.6.pdf Macronix 32Mb(4MB) SPI NOR Flash])&lt;br /&gt;
** [https://datasheet.lcsc.com/szlcsc/2005251035_XTX-XT25F32BSOIGU-S_C558851.pdf XTX XT25F32B]&lt;br /&gt;
** IDs for XT25F32B are: manufacturer (0x0b), device (0x15), memory type (0x40), density (0x16)&lt;br /&gt;
* LCD Panel:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinetime/PineTime%20LCD%20Panel.jpg 1.3&amp;quot; 240x240 IPS LCD Panel Specification for PineTime]&lt;br /&gt;
** [https://wiki.pine64.org/images/5/54/ST7789V_v1.6.pdf 11.6&amp;quot; Sitronix LCD Driver/Controller Datasheet]&lt;br /&gt;
* Touchpad information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinetime/PineTime%20Touch%20Panel.jpg Touchpad Specification for PineTimel]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinetime/CST816S数据手册V1.1.pdf 11.6&amp;quot; Hynitron CST816S Capacitive Touch Controller Datasheet in Chinese]&lt;br /&gt;
** [https://wiki.pine64.org/images/2/2f/CST816S.zip Touch Controller Datasheet en]&lt;br /&gt;
* Sensor:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinetime/BST-BMA421-FL000.pdf BOSCH BMA421 Triaxial VAcceleration Sensor Product Brief]&lt;br /&gt;
** [https://wiki.pine64.org/images/c/cc/Bst-bma400-ds000.pdf BOSCH BMA400 3-axes ultra-low power accelerometer datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinetime/HRS3300%20Heart%20Rate%20Sensor.pdf TianYiHeXin HRS3300 PPG Heart Rate Sensor Data Sheet]&lt;br /&gt;
&lt;br /&gt;
= Community case design =&lt;br /&gt;
&lt;br /&gt;
* [https://www.thingiverse.com/thing:4172849 PineTime Smart Watch case by dara0s at thingiverse]&lt;br /&gt;
* [https://www.thingiverse.com/thing:4651462 PineTime dev kit back fix by joaquimorg at thingiverse]&lt;br /&gt;
* [https://www.thingiverse.com/thing:4763267 PineTime dev kit charging holder v4 by zevix81 at thingiverse]&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=InfiniTime&amp;diff=12122</id>
		<title>InfiniTime</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=InfiniTime&amp;diff=12122"/>
		<updated>2021-12-29T21:27:21Z</updated>

		<summary type="html">&lt;p&gt;Avamander: /* Version 1.3.0 &amp;quot;Purple Fig&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== InfiniTime ==&lt;br /&gt;
InfiniTime (also known as JF's project, FreeRTOS firmware or Pinetime-JF) is an open source (GPLv3) firmware written in C++ and based on FreeRTOS, LVGL and NimBLE. This firmware (version 0.7.1) is preloaded at the factory since the new batch of PineTime devkits and sealed PineTimes of end of September 2020. '''This page contains general information about the project. Actual project documentation and nuances are documented in the repository'''&lt;br /&gt;
&lt;br /&gt;
* GitHub repo : https://github.com/JF002/InfiniTime&lt;br /&gt;
* Official website : https://infinitime.io/&lt;br /&gt;
&lt;br /&gt;
== Read this first! ==&lt;br /&gt;
* InfiniTime and the bootloader are still in heavy development, and some features might not work as expected. Any issues should be reported on GitHub.&lt;br /&gt;
* Do not use a sealed PineTime as a development device, there is a fair amount of chances that you'll brick it with very experimental firmware.&lt;br /&gt;
* OTA is relatively stable, but when you're on an outdated bootloader version it can freeze which will require you to wait for the battery to run out.&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
{{warning|1=Please read this section carefully before upgrading the firmware on your PineTime, especially if you are using a sealed device!}}&lt;br /&gt;
=== Black screen after a reset in sleep mode ===&lt;br /&gt;
==== Description ====&lt;br /&gt;
This issue occurs if you are using the original bootloader (from InfiniTime 0.7.1), upgraded from InfiniTime 0.7.1 to 0.8.2 and the watch resets while the display is OFF : the watch is stuck on a black screen and does not respond to touch, button press or BLE.&lt;br /&gt;
&lt;br /&gt;
The reset can be triggered by the watchdog or manually by long pressing the button. If that doesn't work, wait for the battery to run out, it'll reboot then.&lt;br /&gt;
&lt;br /&gt;
This issue is caused by InfiniTime 0.8.2 that put the external SPI flash memory to sleep before switching the display off and by the bootloader that cannot wake the memory chip up. The bootloader is stuck in an infinite loop.&lt;br /&gt;
&lt;br /&gt;
More info : https://github.com/lupyuen/pinetime-rust-mynewt/issues/24 and https://github.com/JF002/InfiniTime/issues/60&lt;br /&gt;
&lt;br /&gt;
==== Workaround ====&lt;br /&gt;
On a development kit, a simple reset via SWD is needed to unlock the bootloader.&lt;br /&gt;
&lt;br /&gt;
On a sealed device, the only way to work around this issue is to wait for the battery to drain completely before trying again.&lt;br /&gt;
&lt;br /&gt;
This issue can be avoided by ensuring that the display is ON when manually resetting the device (long push on the button).&lt;br /&gt;
&lt;br /&gt;
==== Fixed version ====&lt;br /&gt;
This issues is fixed in [https://github.com/JF002/InfiniTime/releases/tag/0.8.3 InfiniTime 0.8.3]&lt;br /&gt;
&lt;br /&gt;
== Releases == &lt;br /&gt;
&lt;br /&gt;
In the order of oldest first.&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.7.1 Version 0.7.1] ===&lt;br /&gt;
This is the version that ships with PineTime devkits and sealed PineTime as of September 2020.&lt;br /&gt;
* Time synchronization over BLE&lt;br /&gt;
* Display brightness setting&lt;br /&gt;
* Notifications over BLE&lt;br /&gt;
* Integration with AmazFish (SailFishOS) and Gadgetbridge (Android)&lt;br /&gt;
* OTA using NRFConnect&lt;br /&gt;
&lt;br /&gt;
Bootloader : https://github.com/lupyuen/pinetime-rust-mynewt/releases/tag/v4.1.7&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.8.2 Version 0.8.2] ===&lt;br /&gt;
* Music control app&lt;br /&gt;
* Paint app&lt;br /&gt;
* Manual image validation after OTA&lt;br /&gt;
&lt;br /&gt;
Bootloader : https://github.com/lupyuen/pinetime-rust-mynewt/releases/tag/v5.0.4.&lt;br /&gt;
&lt;br /&gt;
This new version of the bootloader fixes [[#Black_screen_after_a_reset_in_sleep_mode]] and enables the watchdog before launching the firmware.&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.8.3 Version 0.8.3] ===&lt;br /&gt;
* Fixes the &amp;quot;bootloader stuck after a reset&amp;quot; mentioned in 0.8.2 above&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.9.0 Version 0.9.0] ===&lt;br /&gt;
* Touch panel fixed (no more freezing)&lt;br /&gt;
* Improved music application (possibility to control both volumes and browsing, display the song progression)&lt;br /&gt;
* Notification UI rewritten: can now display up to 100 characters&lt;br /&gt;
* Improved BLE connectivity&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.10.0 Version 0.10.0] ===&lt;br /&gt;
* 2 new games: Pong and 2048&lt;br /&gt;
* Fixed display glitches and improved needed time to turn on the display&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.11.0 Version 0.11.0] ===&lt;br /&gt;
* Heart-rate sensor application:&lt;br /&gt;
  * Displays the current value, and when running, this value is also displayed on the clock face&lt;br /&gt;
  * Value exposed over BLE, meaning other applications can read it (e.g. companion app such as Amazfish)&lt;br /&gt;
* Navigation app: InfiNav - works e.g. with PureMaps on SailfishOS&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.12.0 Version 0.12.0] ===&lt;br /&gt;
* Improved BLE connection&lt;br /&gt;
* OTA updates much more reliable&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.13.0 Version 0.13.0] ===&lt;br /&gt;
* Vibration&lt;br /&gt;
* Call notification: it is possible to accept/ignore/reject a call from the PineTime&lt;br /&gt;
* Music app got nicer icons&lt;br /&gt;
* BLE connectivity improved a bit more&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.14.0 Version 0.14.0 &amp;quot;Green Avocado&amp;quot;] ===&lt;br /&gt;
* LVGL 7&lt;br /&gt;
* Bugfixes to the build process&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.14.1 Version 0.14.1] ===&lt;br /&gt;
* New Recovery firmware&lt;br /&gt;
* MCUBoot based [https://github.com/JF002/pinetime-mcuboot-bootloader/releases/tag/1.0.0 bootloader]&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.15.0 Version 0.15.0 &amp;quot;Yellow Banana&amp;quot;] ===&lt;br /&gt;
* Analog watch face&lt;br /&gt;
* Support for switching watch faces&lt;br /&gt;
* Stopwatch app&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/1.0.0 Version 1.0.0 &amp;quot;Red Cherry&amp;quot;] ===&lt;br /&gt;
* Motion sensor integration&lt;br /&gt;
* Step countin&lt;br /&gt;
* UI redesign&lt;br /&gt;
* Quick action menu:&lt;br /&gt;
  * Brightness setting&lt;br /&gt;
  * Do not disturb mode (disable vibrations on notifications)&lt;br /&gt;
  * Flash light application&lt;br /&gt;
* Settings menu allowing configuration of:&lt;br /&gt;
  * Display timeout&lt;br /&gt;
  * Wakeup source (button only, single tap, double tap and wrist rotation)&lt;br /&gt;
  * Time format (12/24H)&lt;br /&gt;
  * Watchface&lt;br /&gt;
* New navigation flow :&lt;br /&gt;
* User settings stored in flash memory and restored on reset&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/1.1.0 Version 1.1.0 &amp;quot;Dragon Fruit&amp;quot;] ===&lt;br /&gt;
* Steps application&lt;br /&gt;
* Timer application&lt;br /&gt;
* UI improvements&lt;br /&gt;
* Clang-format and clang-tidy config files&lt;br /&gt;
* Bugfixes&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/1.2.0 Version 1.2.0 &amp;quot;Blue-purple Elderberry&amp;quot;] ===&lt;br /&gt;
* Added support for alternate accelerometer part BMA425&lt;br /&gt;
* Metronome app&lt;br /&gt;
* Memory usage optimizations&lt;br /&gt;
* Bugfixes, minor improvements and code cleanup&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/1.3.0 Version 1.3.0 &amp;quot;Purple Fig&amp;quot;] ===&lt;br /&gt;
* LittleFS integration&lt;br /&gt;
* New watchface, PineTimeStyle&lt;br /&gt;
* Battery level notification on BLE (supported by Gadgetbridge)&lt;br /&gt;
* Improved stopwatch app, Paddle game and call notifications&lt;br /&gt;
* Firmware update app is now more foolproof&lt;br /&gt;
* The SPI flash is put in sleep mode when the watch goes to sleep (only if the new bootloader is detected)&lt;br /&gt;
* UI improvements (better 'tick' handling in LVGL, more consistent refresh rate)&lt;br /&gt;
* Various improvements and code cleaning&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Reprogramming_the_PineTime&amp;diff=12063</id>
		<title>Reprogramming the PineTime</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Reprogramming_the_PineTime&amp;diff=12063"/>
		<updated>2021-12-17T14:13:51Z</updated>

		<summary type="html">&lt;p&gt;Avamander: /* CMSIS-DAP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The PineTime Dev Kit comes with the back not glued down to allow it to be easily reprogrammed, however the kit does not include an hardware programmer/debugger. &lt;br /&gt;
&lt;br /&gt;
'''Before you can use your debugger/programmer, you probably have to [[PineTime devkit wiring|wire up your pinetime]]. Heavily recommended you read this first!'''&lt;br /&gt;
&lt;br /&gt;
There is a bewildering variety of different hardware programmers available but whatever programmer you have there are only a few tasks you will have to learn about:&lt;br /&gt;
&lt;br /&gt;
* Unlocking the device '''Note: PineTime watches shipped after 20 Sep 2020 do not require unlocking. They are shipped unlocked.'''&lt;br /&gt;
* Uploading new software&lt;br /&gt;
* Running a debugger&lt;br /&gt;
&lt;br /&gt;
All of these are described in this article. &lt;br /&gt;
&lt;br /&gt;
Unlocking the device is a one-time action that is needed to enable the debug port and provide full access to the device. Unlocking the device will erase all existing software from the internal flash.&lt;br /&gt;
&lt;br /&gt;
= SWD Pinout =&lt;br /&gt;
 	&lt;br /&gt;
See [[PineTime devkit wiring|PineTime devkit wiring]]&lt;br /&gt;
&lt;br /&gt;
= nrfjprog (for Segger JLink) =&lt;br /&gt;
&lt;br /&gt;
The following steps have been tested with the Segger JLink embedded in the [https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52-DK NRF52-DK development board].&lt;br /&gt;
&lt;br /&gt;
=== Hookup ===&lt;br /&gt;
&lt;br /&gt;
Connect the Pinetime SWD pins to the debugger (P20 on NRF52-DK)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pinetime&lt;br /&gt;
!JLink&lt;br /&gt;
|-&lt;br /&gt;
|GND&lt;br /&gt;
|GND&lt;br /&gt;
|-&lt;br /&gt;
|SWDCLK&lt;br /&gt;
|SWDCLK&lt;br /&gt;
|-&lt;br /&gt;
|SWDIO&lt;br /&gt;
|SWDIO&lt;br /&gt;
|-&lt;br /&gt;
|VCC (3.3V)&lt;br /&gt;
|VTG (target detect)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Unlocking the FLASH ===&lt;br /&gt;
&lt;br /&gt;
Unlocking the device and erase the memory. &lt;br /&gt;
&lt;br /&gt;
'''You need to execute this step only once, to remove the read protection on the memory. Note that it will erase the whole flash memory of the MCU!''' :&lt;br /&gt;
 &lt;br /&gt;
 nrfjprog -f NRF52 --recover&lt;br /&gt;
&lt;br /&gt;
=== Uploading new software ===&lt;br /&gt;
&lt;br /&gt;
1. Program the BLE softdevice (if needed by the firmware). Replace PATH_TO_NRF_SDK by the path where you unzipped the [https://www.nordicsemi.com/Software-and-Tools/Software/nRF5-SDK NRF52 SDK] :&lt;br /&gt;
&lt;br /&gt;
 nrfjprog -f NRF52 --program /PATH_TO_NRF_SDK/components/softdevice/s132/hex/s132_nrf52_6.1.1_softdevice.hex --sectorerase&lt;br /&gt;
&lt;br /&gt;
2. Program the firmware (replace firmware.hex by the actual filename of the firmware):&lt;br /&gt;
&lt;br /&gt;
 nrfjprog -f NRF52 --program firmware.hex --sectorerase&lt;br /&gt;
&lt;br /&gt;
3. Reset and run the new firmware:&lt;br /&gt;
 &lt;br /&gt;
 nrfjprog -f NRF52 --reset&lt;br /&gt;
&lt;br /&gt;
= OpenOCD =&lt;br /&gt;
&lt;br /&gt;
OpenOCD, the Open On-Chip Debugger supports multiple different adapters. You can read more about it here: http://openocd.org/&lt;br /&gt;
&lt;br /&gt;
== Adapters ==&lt;br /&gt;
&lt;br /&gt;
These examples allow you to use telnet to issue futher commands to the devkit. Using them you can connect to ''127.0.0.1'' (''localhost'') port ''4444'' using telnet and invoke OpenOCD commands. GDB should also be available on port ''3333''.&lt;br /&gt;
&lt;br /&gt;
You can simplify your life by creating a configuration file that contains the interface, transport, target and speed configuration. Things like CLion also need one to work properly.&lt;br /&gt;
&lt;br /&gt;
If you aren't using the latest version of OpenOCD, you might need to substitute things in these examples with older syntax (e.g. instead of ''adapter speed'' it's ''adapter_khz'').&lt;br /&gt;
&lt;br /&gt;
=== CMSIS-DAP ===&lt;br /&gt;
&lt;br /&gt;
This is a generic specification that is supported by a bunch of different hardware, things such as DAPLink also use it.&lt;br /&gt;
&lt;br /&gt;
Issue this command to initialize a connection to the devkit:&lt;br /&gt;
&lt;br /&gt;
 openocd \&lt;br /&gt;
    -c 'source [find interface/cmsis-dap.cfg]' \&lt;br /&gt;
    -c 'transport select swd' \&lt;br /&gt;
    -c 'source [find target/nrf52.cfg]' \&lt;br /&gt;
    -c 'adapter speed 8000' \&lt;br /&gt;
    -c 'init'&lt;br /&gt;
&lt;br /&gt;
=== JLink ===&lt;br /&gt;
&lt;br /&gt;
Start OpenOCD:&lt;br /&gt;
&lt;br /&gt;
 openocd \&lt;br /&gt;
    -c 'source [find interface/jlink.cfg]' \&lt;br /&gt;
    -c 'transport select swd' \&lt;br /&gt;
    -c 'source [find target/nrf52.cfg]' \&lt;br /&gt;
    -c 'adapter speed 8000' \&lt;br /&gt;
    -c 'init'&lt;br /&gt;
&lt;br /&gt;
=== Raspberry Pi ===&lt;br /&gt;
&lt;br /&gt;
 openocd \&lt;br /&gt;
    -c 'source bcm2835spi' \&lt;br /&gt;
    -c 'bcm2835spi_speed 31200' \&lt;br /&gt;
    -c 'source [find target/nrf52.cfg]' \&lt;br /&gt;
    -c 'init'&lt;br /&gt;
&lt;br /&gt;
=== STLink ===&lt;br /&gt;
&lt;br /&gt;
Connect PineTime SWD Pins to ST-Link v2 as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!PineTime&lt;br /&gt;
!ST-Link&lt;br /&gt;
|-&lt;br /&gt;
|GND&lt;br /&gt;
|GND&lt;br /&gt;
|-&lt;br /&gt;
|SWDCLK&lt;br /&gt;
|SWDCLK&lt;br /&gt;
|-&lt;br /&gt;
|SWDIO&lt;br /&gt;
|SWDIO&lt;br /&gt;
|-&lt;br /&gt;
|VCC (3.3V)&lt;br /&gt;
|3.3V&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:pinetime-stlink.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
Note that only the bottom row of pins on ST-Link are used.&lt;br /&gt;
&lt;br /&gt;
To flash PineTime with ST-Link on Linux and macOS, use [https://github.com/lupyuen/pinetime-updater/blob/master/README.md PineTime Updater]&lt;br /&gt;
&lt;br /&gt;
[[PineTime FAQ|'''ST-Link can't be used to remove nRF52 flash protection''']]&lt;br /&gt;
&lt;br /&gt;
== Unlocking the device ==&lt;br /&gt;
&lt;br /&gt;
If you need to disable access port protection then you can do this using the following commands below.&lt;br /&gt;
&lt;br /&gt;
This can be done in two ways:&lt;br /&gt;
&lt;br /&gt;
Appending this to OpenOCD command line:&lt;br /&gt;
&lt;br /&gt;
  -c 'nrf52.dap apreg 1 0x04' -c 'nrf52.dap apreg 1 0x04 0x01' -c 'nrf52.dap apreg 1 0x04'&lt;br /&gt;
&lt;br /&gt;
Or by using the telnet connection, just type in ''telnet localhost 4444'' and then you can issue commands to OpenOCD:&lt;br /&gt;
&lt;br /&gt;
Note: ''Unlocking the device to remove access port protection will erase the contents of flash.''&lt;br /&gt;
&lt;br /&gt;
  telnet localhost 4444&lt;br /&gt;
    Trying 127.0.0.1...&lt;br /&gt;
    Connected to localhost.&lt;br /&gt;
    Escape character is '^]'.&lt;br /&gt;
    Open On-Chip Debugger&lt;br /&gt;
    &amp;gt; nrf52.dap apreg 1 0x04&lt;br /&gt;
    0x00000000&lt;br /&gt;
    &amp;gt; nrf52.dap apreg 1 0x04 0x01&lt;br /&gt;
    &amp;gt; nrf52.dap apreg 1 0x04&lt;br /&gt;
    0x00000001&lt;br /&gt;
&lt;br /&gt;
(If the ''nrf52.dap'' command cannot be found, try just ''dap'' instead.)&lt;br /&gt;
&lt;br /&gt;
== Uploading new software ==&lt;br /&gt;
&lt;br /&gt;
Just issue this command, replace ''code.hex'' with your own (and cmsis-dap.cfg with an appropriate adapter).&lt;br /&gt;
&lt;br /&gt;
  openocd \&lt;br /&gt;
      -c 'source [find interface/cmsis-dap.cfg]' \&lt;br /&gt;
      -c 'transport select swd' \&lt;br /&gt;
      -c 'source [find target/nrf52.cfg]' \&lt;br /&gt;
      -c 'init' \&lt;br /&gt;
      -c 'halt' \&lt;br /&gt;
      -c 'nrf5 mass_erase' \&lt;br /&gt;
      -c 'program code.hex verify' \&lt;br /&gt;
      -c 'reset' \&lt;br /&gt;
      -c 'exit'&lt;br /&gt;
&lt;br /&gt;
= Black Magic Probe =&lt;br /&gt;
&lt;br /&gt;
BlackMagic Probe is an JTAG/SWD adapter with open-source firmware, allowing for it to be ported to a multitude of different boards. One of it's defining features is lack of need for intermediate software such as OpenOCD - one would just need to connect to the GDB server running on the chip and proceed with debugging. For more information, refer to [https://github.com/blacksphere/blackmagic/wiki wiki].&lt;br /&gt;
&lt;br /&gt;
=== Native adapters ===&lt;br /&gt;
&lt;br /&gt;
The native adapters are the official Black Magic family of debug adapters, including the original Black Magic Probe and the Black Magic Probe Mini. By buying the official hardware you are supporting the continued development of the Black Magic Probe software.&lt;br /&gt;
&lt;br /&gt;
Providing your native adapter is running up-to-date firmware then it can be used to program your PineTime.&lt;br /&gt;
&lt;br /&gt;
=== STM32 (Blue Pill) ===&lt;br /&gt;
&lt;br /&gt;
It is possible to flash a popular development board based on STM32F103C8T6 microcontroller, known as Blue Pill, to make a BlackMagic Probe device. For example, one may follow instructions in [https://forum.pine64.org/showthread.php?tid=8816&amp;amp;pid=57095#pid57095 forum post] or [https://gist.github.com/darnel/dac1370d057e176386ca4026418abc2b gist] (mac os). Also, it is possible to use SWD pins on the board to flash other devices, instead using arbitrary pins on the board itself. See [https://buger.dread.cz/black-magic-probe-bmp-on-bluepill-stm32f103c8-minimum-system-development-board.html this link] for more detals.&lt;br /&gt;
&lt;br /&gt;
=== Other hardware ===&lt;br /&gt;
&lt;br /&gt;
The Black Magic Probe firmware can be run on a variety of host devices. See [https://github.com/blacksphere/blackmagic/wiki/Debugger-Hardware BMP Debugger Hardware] for more information.&lt;br /&gt;
&lt;br /&gt;
=== Using the BMP to flash the PineTime ===&lt;br /&gt;
&lt;br /&gt;
Refer to the BMP [https://github.com/blacksphere/blackmagic/wiki/Useful-GDB-commands wiki] for the full description of commands.&lt;br /&gt;
Overall, the process on Linux is like following. (/dev/ttyBmpGdb is a symlink created by the udev rule). It's useful to create a gdb script file (or .gdbinit) with following commands:&lt;br /&gt;
&lt;br /&gt;
  target extended-remote /dev/ttyBmpGdb&lt;br /&gt;
  monitor swdp_scan&lt;br /&gt;
  attach 1&lt;br /&gt;
  file %firmware file%&lt;br /&gt;
&lt;br /&gt;
Then one may use '''load''' command to flash the firmware, '''compare-sections''' to verify the upload, or '''monitor erase_mass''' to erase the firmware. &lt;br /&gt;
&lt;br /&gt;
Then, proceed with debugging as normal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= External links and additional tutorials = &lt;br /&gt;
&lt;br /&gt;
* https://github.com/jlukanc1/pinetime-boot-flasher&lt;br /&gt;
* https://blog.aegrel.ee/absniffer-cmsis-dap-sniffer.html&lt;br /&gt;
* https://blog.dbrgn.ch/2020/5/16/nrf52-unprotect-flash-jlink-openocd/&lt;br /&gt;
* https://medium.com/@ly.lee/openocd-on-raspberry-pi-better-with-swd-on-spi-7dea9caeb590&lt;br /&gt;
* https://medium.com/@ly.lee/build-and-flash-rust-mynewt-firmware-for-pinetime-smart-watch-5e14259c55&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=InfiniTime&amp;diff=11834</id>
		<title>InfiniTime</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=InfiniTime&amp;diff=11834"/>
		<updated>2021-11-21T13:30:43Z</updated>

		<summary type="html">&lt;p&gt;Avamander: /* Releases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== InfiniTime ==&lt;br /&gt;
InfiniTime (also known as JF's project, FreeRTOS firmware or Pinetime-JF) is an open source (GPLv3) firmware written in C++ and based on FreeRTOS, LVGL and NimBLE. This firmware (version 0.7.1) is preloaded at the factory since the new batch of PineTime devkits and sealed PineTimes of end of September 2020. '''This page contains general information about the project. Actual project documentation and nuances are documented in the repository'''&lt;br /&gt;
&lt;br /&gt;
* GitHub repo : https://github.com/JF002/InfiniTime&lt;br /&gt;
* Official website : https://infinitime.io/&lt;br /&gt;
&lt;br /&gt;
== Read this first! ==&lt;br /&gt;
* InfiniTime and the bootloader are still in heavy development, and some features might not work as expected. Any issues should be reported on GitHub.&lt;br /&gt;
* Do not use a sealed PineTime as a development device, there is a fair amount of chances that you'll brick it with very experimental firmware.&lt;br /&gt;
* OTA is relatively stable, but when you're on an outdated bootloader version it can freeze which will require you to wait for the battery to run out.&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
{{warning|1=Please read this section carefully before upgrading the firmware on your PineTime, especially if you are using a sealed device!}}&lt;br /&gt;
=== Black screen after a reset in sleep mode ===&lt;br /&gt;
==== Description ====&lt;br /&gt;
This issue occurs if you are using the original bootloader (from InfiniTime 0.7.1), upgraded from InfiniTime 0.7.1 to 0.8.2 and the watch resets while the display is OFF : the watch is stuck on a black screen and does not respond to touch, button press or BLE.&lt;br /&gt;
&lt;br /&gt;
The reset can be triggered by the watchdog or manually by long pressing the button. If that doesn't work, wait for the battery to run out, it'll reboot then.&lt;br /&gt;
&lt;br /&gt;
This issue is caused by InfiniTime 0.8.2 that put the external SPI flash memory to sleep before switching the display off and by the bootloader that cannot wake the memory chip up. The bootloader is stuck in an infinite loop.&lt;br /&gt;
&lt;br /&gt;
More info : https://github.com/lupyuen/pinetime-rust-mynewt/issues/24 and https://github.com/JF002/InfiniTime/issues/60&lt;br /&gt;
&lt;br /&gt;
==== Workaround ====&lt;br /&gt;
On a development kit, a simple reset via SWD is needed to unlock the bootloader.&lt;br /&gt;
&lt;br /&gt;
On a sealed device, the only way to work around this issue is to wait for the battery to drain completely before trying again.&lt;br /&gt;
&lt;br /&gt;
This issue can be avoided by ensuring that the display is ON when manually resetting the device (long push on the button).&lt;br /&gt;
&lt;br /&gt;
==== Fixed version ====&lt;br /&gt;
This issues is fixed in [https://github.com/JF002/InfiniTime/releases/tag/0.8.3 InfiniTime 0.8.3]&lt;br /&gt;
&lt;br /&gt;
== Releases == &lt;br /&gt;
&lt;br /&gt;
In the order of oldest first.&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.7.1 Version 0.7.1] ===&lt;br /&gt;
This is the version that ships with PineTime devkits and sealed PineTime as of September 2020.&lt;br /&gt;
* Time synchronization over BLE&lt;br /&gt;
* Display brightness setting&lt;br /&gt;
* Notifications over BLE&lt;br /&gt;
* Integration with AmazFish (SailFishOS) and Gadgetbridge (Android)&lt;br /&gt;
* OTA using NRFConnect&lt;br /&gt;
&lt;br /&gt;
Bootloader : https://github.com/lupyuen/pinetime-rust-mynewt/releases/tag/v4.1.7&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.8.2 Version 0.8.2] ===&lt;br /&gt;
* Music control app&lt;br /&gt;
* Paint app&lt;br /&gt;
* Manual image validation after OTA&lt;br /&gt;
&lt;br /&gt;
Bootloader : https://github.com/lupyuen/pinetime-rust-mynewt/releases/tag/v5.0.4.&lt;br /&gt;
&lt;br /&gt;
This new version of the bootloader fixes [[#Black_screen_after_a_reset_in_sleep_mode]] and enables the watchdog before launching the firmware.&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.8.3 Version 0.8.3] ===&lt;br /&gt;
* Fixes the &amp;quot;bootloader stuck after a reset&amp;quot; mentioned in 0.8.2 above&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.9.0 Version 0.9.0] ===&lt;br /&gt;
* Touch panel fixed (no more freezing)&lt;br /&gt;
* Improved music application (possibility to control both volumes and browsing, display the song progression)&lt;br /&gt;
* Notification UI rewritten: can now display up to 100 characters&lt;br /&gt;
* Improved BLE connectivity&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.10.0 Version 0.10.0] ===&lt;br /&gt;
* 2 new games: Pong and 2048&lt;br /&gt;
* Fixed display glitches and improved needed time to turn on the display&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.11.0 Version 0.11.0] ===&lt;br /&gt;
* Heart-rate sensor application:&lt;br /&gt;
  * Displays the current value, and when running, this value is also displayed on the clock face&lt;br /&gt;
  * Value exposed over BLE, meaning other applications can read it (e.g. companion app such as Amazfish)&lt;br /&gt;
* Navigation app: InfiNav - works e.g. with PureMaps on SailfishOS&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.12.0 Version 0.12.0] ===&lt;br /&gt;
* Improved BLE connection&lt;br /&gt;
* OTA updates much more reliable&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.13.0 Version 0.13.0] ===&lt;br /&gt;
* Vibration&lt;br /&gt;
* Call notification: it is possible to accept/ignore/reject a call from the PineTime&lt;br /&gt;
* Music app got nicer icons&lt;br /&gt;
* BLE connectivity improved a bit more&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.14.0 Version 0.14.0 &amp;quot;Green Avocado&amp;quot;] ===&lt;br /&gt;
* LVGL 7&lt;br /&gt;
* Bugfixes to the build process&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.14.1 Version 0.14.1] ===&lt;br /&gt;
* New Recovery firmware&lt;br /&gt;
* MCUBoot based [https://github.com/JF002/pinetime-mcuboot-bootloader/releases/tag/1.0.0 bootloader]&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.15.0 Version 0.15.0 &amp;quot;Yellow Banana&amp;quot;] ===&lt;br /&gt;
* Analog watch face&lt;br /&gt;
* Support for switching watch faces&lt;br /&gt;
* Stopwatch app&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/1.0.0 Version 1.0.0 &amp;quot;Red Cherry&amp;quot;] ===&lt;br /&gt;
* Motion sensor integration&lt;br /&gt;
* Step countin&lt;br /&gt;
* UI redesign&lt;br /&gt;
* Quick action menu:&lt;br /&gt;
  * Brightness setting&lt;br /&gt;
  * Do not disturb mode (disable vibrations on notifications)&lt;br /&gt;
  * Flash light application&lt;br /&gt;
* Settings menu allowing configuration of:&lt;br /&gt;
  * Display timeout&lt;br /&gt;
  * Wakeup source (button only, single tap, double tap and wrist rotation)&lt;br /&gt;
  * Time format (12/24H)&lt;br /&gt;
  * Watchface&lt;br /&gt;
* New navigation flow :&lt;br /&gt;
* User settings stored in flash memory and restored on reset&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/1.1.0 Version 1.1.0 &amp;quot;Dragon Fruit&amp;quot;] ===&lt;br /&gt;
* Steps application&lt;br /&gt;
* Timer application&lt;br /&gt;
* UI improvements&lt;br /&gt;
* Clang-format and clang-tidy config files&lt;br /&gt;
* Bugfixes&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/1.2.0 Version 1.2.0 &amp;quot;Blue-purple Elderberry&amp;quot;] ===&lt;br /&gt;
* Added support for alternate accelerometer part BMA425&lt;br /&gt;
* Metronome app&lt;br /&gt;
* Memory usage optimizations&lt;br /&gt;
* Bugfixes, minor improvements and code cleanup&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/1.3.0 Version 1.3.0 &amp;quot;Purple Fig&amp;quot;] ===&lt;br /&gt;
* LittelFS integration&lt;br /&gt;
* New watchface, PineTimeStyle&lt;br /&gt;
* Battery level notification on BLE (supported by Gadgetbridge)&lt;br /&gt;
* Improved stopwatch app, Paddle game and call notifications&lt;br /&gt;
* Firmware update app is now more foolproof&lt;br /&gt;
* The SPI flash is put in sleep mode when the watch goes to sleep (only if the new bootloader is detected)&lt;br /&gt;
* UI improvements (better 'tick' handling in LVGL, more consistent refresh rate)&lt;br /&gt;
* Various improvements and code cleaning&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Upgrade_PineTime_to_InfiniTime_1.0.0&amp;diff=11816</id>
		<title>Upgrade PineTime to InfiniTime 1.0.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Upgrade_PineTime_to_InfiniTime_1.0.0&amp;diff=11816"/>
		<updated>2021-11-18T21:00:57Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Devices shipped before July 2021 were pre-installed with InfiniTime 0.7.1, and an older bootloader. This features green text 'PINE TIME' on boot, and should be updated to the new bootloader as described below.'''&lt;br /&gt;
&lt;br /&gt;
'''Devices shipped after July 2021 were pre-installed with InfiniTime 1.2 and the new bootloader, which can be identified by the green Pinecone image on boot. The instructions below are unnecessary for these devices.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Congratulations on receiving your new PineTime!&lt;br /&gt;
&lt;br /&gt;
So now you're probably wondering exactly how on earth do you go about upgrading your watch to the latest and greatest version of InfiniTime - you know, that version you've seen all those great pictures, videos and reviews of. To those of us that are developing stuff for it, it's pretty easy and straightforward, but like with all technology, it is a bit tricky. &lt;br /&gt;
&lt;br /&gt;
{{warning|1=Some people ran into issues during the update process that would temporarily make their watch unusable (display frozen or blank). The only know workaround consists of waiting for the battery to drain completely and try again. With the display off, and battery fully charged, you can expect a wait of 5-7 days so it is best to not fully charge it. If it freezes with the display on, it will likely be flat by the end of the day. We've never heard of any PineTimes that were permanently bricked (were not recoverable), though. }} &lt;br /&gt;
&lt;br /&gt;
In a nutshell, you need to:&lt;br /&gt;
# Charge your watch, but '''not''' to 100% - keep it at approximately 50% - for the reason described above.&lt;br /&gt;
# Update InfiniTime&lt;br /&gt;
# Update the bootloader&lt;br /&gt;
# Install the recovery firmware&lt;br /&gt;
&lt;br /&gt;
= Update Process =&lt;br /&gt;
So how do you do this? Where do you start? Well, with a sealed PineTime, your only easy option is via Over The Air (OTA) Device Firmware Update (DFU), which is done via Bluetooth. There are a couple of different ways and apps you can use to do this. If you have an Android device, you can use [https://f-droid.org/en/packages/nodomain.freeyourgadget.gadgetbridge/ Gadgetbridge] or [https://play.google.com/store/apps/details?id=no.nordicsemi.android.mcp NRFConnect] (NRFConnect is available on iOS devices as well). Otherwise, if your laptop or desktop computer has Bluetooth and runs Linux, you can use [https://github.com/alexr4535/siglo Siglo] or [https://github.com/piggz/harbour-amazfish Amazfish]. You can also use these applications on your Pinebook Pro or Pinephone if you happen to have those devices. &lt;br /&gt;
&lt;br /&gt;
The reason for installing the updates in the specified order is because newer versions of InfiniTime have a more robust Bluetooth update process, and since we're updating everything over Bluetooth, the fewer retries and failures from that you have the better. It will still sometimes disconnect mid update, meaning you'll need to try again, and possibly restart the watch a few times as well. And since the recovery firmware is new to the 1.0.0 version of the bootloader, it's best to update that last. &lt;br /&gt;
&lt;br /&gt;
[https://video.codingfield.com/videos/watch/831077c5-16f3-47b4-9b2b-c4bbfecc6529 This video] shows the bootloader and recovery firmware installation procedure.&lt;br /&gt;
&lt;br /&gt;
[https://video.codingfield.com/videos/watch/f7bffb3d-a6a1-43c4-8f01-f4aeff4adf9e This video] shows the bootloader installation and firmware update using Amazfish.&lt;br /&gt;
&lt;br /&gt;
You can also read a [https://github.com/JF002/pinetime-mcuboot-bootloader/blob/339224cf5ed21f4e8b2d22eaeab9869120f7f752/docs/howToUpdate.md detailed installation procedure in the documentation of the bootloader].&lt;br /&gt;
&lt;br /&gt;
== Update InfiniTime ==&lt;br /&gt;
To update the main InfiniTime app, you want to flash [https://github.com/JF002/InfiniTime/releases/download/1.0.0/pinetime-mcuboot-app-dfu-1.0.0.zip pinetime-mcuboot-app-dfu-1.0.0.zip].&lt;br /&gt;
&lt;br /&gt;
After updating InfiniTime, ensure that you validate the firmware to prevent it from being automatically reverted/rolled back if your watch is reset/restarted. To do this, swipe right to access the quick actions panel, press the gear/settings icon, swipe up once to show the second page, press on the 'Firmware' option and then on 'Validate'.&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/-5lwBd60k0Q Video showing validation process]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Gadgetbridge ===&lt;br /&gt;
&lt;br /&gt;
# Connect your PineTime to GB&lt;br /&gt;
# Download the aforementioned file to your phone&lt;br /&gt;
# Find the file in your file manager&lt;br /&gt;
# 'Open With' Gadgetbridge F/W Installer (method varies by device) - on my phone, it is press and hold, select the file, and then choose 'open with app' from the more options menu&lt;br /&gt;
# Confirm that you wish to apply the update&lt;br /&gt;
# Wait for the update to complete&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/nAaaC7D5sVo Video showing how to start the update]&lt;br /&gt;
&lt;br /&gt;
=== NRFConnect ===&lt;br /&gt;
&lt;br /&gt;
# Download the aforementioned file to your phone.&lt;br /&gt;
# Open NRFConnect&lt;br /&gt;
# Scan for your device&lt;br /&gt;
# Connect to it&lt;br /&gt;
# Choose the DFU option at the top right of the screen&lt;br /&gt;
# Ensure the 'Distribution packet (ZIP)' option is selected, and press OK&lt;br /&gt;
# Select your previously downloaded file&lt;br /&gt;
# Wait for the update to complete&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/jnX7WwYDiDE Video showing how to start the update]&lt;br /&gt;
&lt;br /&gt;
=== Siglo ===&lt;br /&gt;
# If your device was not detected upon start, press &amp;quot;Rescan&amp;quot; to find it.&lt;br /&gt;
# Select the &amp;quot;1.0.0&amp;quot; tag&lt;br /&gt;
# Select the aforementioned file/asset.&lt;br /&gt;
# Select &amp;quot;Flash It!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Amazfish ===&lt;br /&gt;
# Run Amazfish (service + UI)&lt;br /&gt;
# Pair with you device:&lt;br /&gt;
## Unzip the DFU file to extract the .bin file.&lt;br /&gt;
## Click on &amp;quot;pair with watch&amp;quot; on the top&lt;br /&gt;
## Select &amp;quot;PineTime&amp;quot; (if your device is running InfiniTime 0.7.1 or lower) or &amp;quot;InfiniTime (if it's running InfiniTime 0.8+) and choose your device in the list&lt;br /&gt;
# Click on &amp;quot;Download file&amp;quot; on the top &lt;br /&gt;
# Click on &amp;quot;Choose file&amp;quot; and select the .bin file you extracted from the DFU file&lt;br /&gt;
# Click on &amp;quot;Send file&amp;quot;&lt;br /&gt;
# Wait for the update to complete.&lt;br /&gt;
&lt;br /&gt;
[https://video.codingfield.com/videos/watch/41cfcf5d-b0e6-4323-8056-b0a6682d1f25 See it in action!]&lt;br /&gt;
&lt;br /&gt;
== Update the bootloader ==&lt;br /&gt;
To update the bootloader, you want to flash [https://github.com/JF002/InfiniTime/releases/download/0.14.1/reloader-mcuboot.zip reloader-mcuboot.zip]. &lt;br /&gt;
Once the bootloader is updated, you should notice that the boot logo has changed. Previously, it was a green &amp;quot;PineTime&amp;quot; logo, and now it is a large pinecone that is progressively drawn in green.&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/fvHQ8ZeqnOo Video showing what the InfiniTime 1.0.0 bootloader looks like]&lt;br /&gt;
&lt;br /&gt;
=== Using Gadgetbridge ===&lt;br /&gt;
&lt;br /&gt;
Same process as before, but with the file for this step.&lt;br /&gt;
&lt;br /&gt;
=== Using NRFConnect ===&lt;br /&gt;
&lt;br /&gt;
Same process as before, but with the file for this step.&lt;br /&gt;
&lt;br /&gt;
=== Using Siglo ===&lt;br /&gt;
Same process as before, but select the &amp;quot;0.14.1&amp;quot; tag, and the file/asset for this step.&lt;br /&gt;
&lt;br /&gt;
=== Using Amazfish ===&lt;br /&gt;
&lt;br /&gt;
You may need to re-pair with your device by selecting &amp;quot;InfiniTime&amp;quot; (since you've already upgraded to InfiniTime 1.0) in the device type list. Then follow the same process as before, but with the file for this step.&lt;br /&gt;
&lt;br /&gt;
== Install the recovery firmware ==&lt;br /&gt;
{{warning|1=Don't do this before updating the bootloader, otherwise your PineTime will freeze at the end of the process, and you will need to wait for the battery to go flat }} &lt;br /&gt;
&lt;br /&gt;
To install the recovery firmware, you want to flash [https://github.com/JF002/InfiniTime/releases/download/0.14.1/pinetime-mcuboot-recovery-loader-dfu-0.14.1.zip pinetime-mcuboot-recovery-loader-dfu-0.14.1.zip]. You will know when this is running when it shows an InfiniTime logo with a progress bar running across the bottom whilst it is installing the recovery firmware. &lt;br /&gt;
&lt;br /&gt;
=== Using Gadgetbridge ===&lt;br /&gt;
&lt;br /&gt;
Same process as before, but with the file for this step.&lt;br /&gt;
&lt;br /&gt;
=== Using NRFConnect ===&lt;br /&gt;
&lt;br /&gt;
Same process as before, but with the file for this step.&lt;br /&gt;
&lt;br /&gt;
=== Using Siglo ===&lt;br /&gt;
Same process as before, but with the file/asset for this step.&lt;br /&gt;
&lt;br /&gt;
=== Using Amazfish ===&lt;br /&gt;
&lt;br /&gt;
Same process as before, but with the file for this step.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Guides and Videos =&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
Sometimes during the update process, the connection will drop, and the update will fail. Your PineTime isn't broken, most likely the Bluetooth link dropped for a moment, so just try again. Try rebooting your phone, if it keeps failing, try restarting the watch by holding the power button down for approximately 8 seconds. Try to '''avoid''' holding down the button with the screen off. Or try with another device, just in case there are compatibility issues. &lt;br /&gt;
&lt;br /&gt;
Version 1.0.0 of InfiniTime is merely the first version that was considered sufficiently feature-complete and stable enough for daily use. This isn't to say there aren't still bugs present ('cause there are!). So there are a few bugs still present in the update process and the bootloader. One unfortunate bug appears to be that sometimes when the watch tries to restart after an update, the bootloader locks up, and the watch won't turn on. In this case, you will need to wait until the watch battery goes flat, to force the watch to reset. This will most likely involve waiting for a week, and then when you put the watch on the charging cradle, it will power up and you should be right to try again.&lt;br /&gt;
&lt;br /&gt;
If you get stuck or have any questions, join us on your preferred [[Main_Page#Chat_Platforms|chat platform]] or the product [https://forum.pine64.org/forumdisplay.php?fid=134 forum]. There's usually someone available who can help, or will get back to you in a few hours.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]][[Category:Guide]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineTime_FAQ&amp;diff=11786</id>
		<title>PineTime FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineTime_FAQ&amp;diff=11786"/>
		<updated>2021-11-10T23:02:29Z</updated>

		<summary type="html">&lt;p&gt;Avamander: /* Troubleshooting PineTime's Bluetooth (InfiniTime firmware) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Does PineTime run Linux? ==&lt;br /&gt;
&lt;br /&gt;
No. [https://forum.pine64.org/showthread.php?tid=8112 Please read this forum article] for information about Linux on PineTime. Also check out the article [https://lupyuen.github.io/pinetime-rust-mynewt/articles/pinetime &amp;quot;PineTime doesn't run Linux... But that's OK!&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
== Why are there two versions of the PineTime in the store? ==&lt;br /&gt;
&lt;br /&gt;
See the below question and answer.&lt;br /&gt;
&lt;br /&gt;
== Why can I only buy the closed version in a 3-pack, and the open version per one? ==&lt;br /&gt;
&lt;br /&gt;
TL:DR: The unsealed PineTime is for development, the sealed one is for production use, because of firmware uploads. That is also why they were initially sold three in a pack.&lt;br /&gt;
&lt;br /&gt;
In the current situation in development there are some reasons to want to be sure you only experiment with an open device. If you install the wrong firmware, your device could be bricked, until you find a way to open it, which will likely damage the device.&lt;br /&gt;
The idea is that if you want to develop an application for the PineTime, you will be testing it out first, and only after you know for sure your new firmware is well tested, you will install it on sealed devices. If you are in the beta stage, having more than one PineTime is probably a good idea. So to prevent people from locking themselves out at the first test, it was decided to sell the closed version only as a pack of 3. Development can be done on an open device, so any issues can be easily handled.&lt;br /&gt;
&lt;br /&gt;
== How long does it take to ship my PineTime? ==&lt;br /&gt;
&lt;br /&gt;
That depends on whether you chose for Standard or Express shipping. Standard shipping for the dev kit may take up to a few weeks.&lt;br /&gt;
&lt;br /&gt;
== How do I install new software on PineTime? ==&lt;br /&gt;
&lt;br /&gt;
If you have a Sealed PineTime, flash only tested PineTime Firmware to your PineTime. If you flash unknown PineTime Firmware, your sealed PineTime may be bricked relatively permanently.&lt;br /&gt;
&lt;br /&gt;
There is a lot of different software for flashing. Check out [[PineTime Development]] page for a list of companion software.&lt;br /&gt;
&lt;br /&gt;
Also see [[Reprogramming_the_PineTime|this page to see various methods of reprogramming the devkit PineTime the wired way]].&lt;br /&gt;
&lt;br /&gt;
Remember to validate the firmware after flashing: Swipe up to show the menu, tap the checkmark icon, tap &amp;quot;Validate&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== My PineTime arrived, now what? ==&lt;br /&gt;
&lt;br /&gt;
You should start by testing out all the features of the watch, to make sure everything works. Power it on and check the display.&lt;br /&gt;
&lt;br /&gt;
PineTime is shipped with InfiniTime firmware. Press the watch button to show the clock, then swipe up on the touchscreen to reveal the menu.&lt;br /&gt;
&lt;br /&gt;
You probably now wish to update the bootloader and firmware.&lt;br /&gt;
&lt;br /&gt;
== What's the OS that's preinstalled on the PineTime by default? ==&lt;br /&gt;
&lt;br /&gt;
PineTime ships with the open source [https://github.com/JF002/InfiniTime InfiniTime firmware].&lt;br /&gt;
&lt;br /&gt;
To support firmware update and rollback, PineTime includes the open source [https://lupyuen.github.io/pinetime-rust-mynewt/articles/mcuboot MCUBoot Bootloader].&lt;br /&gt;
&lt;br /&gt;
== Can we use this OS or its source code? ==&lt;br /&gt;
&lt;br /&gt;
Yes, [https://github.com/JF002/InfiniTime InfiniTime] and the [https://lupyuen.github.io/pinetime-rust-mynewt/articles/mcuboot MCUBoot Bootloader] are open source.&lt;br /&gt;
&lt;br /&gt;
== Why is the back exposed? Is it supposed to snap on? ==&lt;br /&gt;
&lt;br /&gt;
The back cover of the PineTime devkit is exposed so that you can flash and debug the device with the SWD pins. The main unit and cover does not snap (lock) together. If you want to attach the back cover anyway, you can use glue or tape.&lt;br /&gt;
&lt;br /&gt;
== What hardware should I use to flash code to the PineTime? ==&lt;br /&gt;
&lt;br /&gt;
There are several ways you can do this, check out [[Reprogramming the PineTime]]&lt;br /&gt;
&lt;br /&gt;
== How do I connect the PineTime to a programmer? ==&lt;br /&gt;
&lt;br /&gt;
Here's how: [[PineTime devkit wiring]]&lt;br /&gt;
&lt;br /&gt;
== How do I set the time on PineTime? ==&lt;br /&gt;
&lt;br /&gt;
You can use either nRF Connect, custom GadgetBridge build or the proprietary Da Fit app. See [https://lupyuen.github.io/pinetime-rust-mynewt/articles/cloud#set-pinetime-date-and-time-with-nrf-connect &amp;quot;Set PineTime Date and Time with nRF Connect&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
You can also set the time using your PinePhone or other Linux-based Bluetooth LE capable device with the Bluez software installed. Install the bluez package and make sure your PineTime is running and awake with InfiniTime 0.7.1 or later.&lt;br /&gt;
&lt;br /&gt;
  $ bluetoothctl&lt;br /&gt;
  [ bluetooth ]# scan on&lt;br /&gt;
  ...&lt;br /&gt;
  [NEW] Device D7:03:FB:6E:31:B2 Pinetime-JF&lt;br /&gt;
  ...&lt;br /&gt;
  [bluetooth]# pair D7:03:FB:6E:31:B2&lt;br /&gt;
  Attempting to pair with D7:03:FB:6E:31:B2&lt;br /&gt;
  ...&lt;br /&gt;
  [NEW] Characteristic (Handle 0xfd80)&lt;br /&gt;
    /org/bluez/hci0/dev_D7_03_FB_6E_31_B2/service0015/char0016&lt;br /&gt;
    00002a2b-0000-1000-8000-00805f9b34fb&lt;br /&gt;
    Current Time&lt;br /&gt;
  ...&lt;br /&gt;
  [Pinetime-JF]# menu gatt&lt;br /&gt;
  ...&lt;br /&gt;
  [Pinetime-JF]# select-attribute /org/bluez/hci0/dev_D7_03_FB_6E_31_B2/service0015/char0016&lt;br /&gt;
  [Pinetime-JF:/service0015/char0016]# read&lt;br /&gt;
  Attempting to read /org/bluez/hci0/dev_D7_03_FB_6E_31_B2/service0015/char0016&lt;br /&gt;
  [CHG] Attribute /org/bluez/hci0/dev_D7_03_FB_6E_31_B2/service0015/char0016 Value:&lt;br /&gt;
    b2 07 01 01 00 04 15 00 00                       .........       &lt;br /&gt;
    b2 07 01 01 00 04 15 00 00                       .........&lt;br /&gt;
  [Pinetime-JF:/service0015/char0016]# write &amp;quot;0xe4 0x07 0x0c 0x1f 0x0e 0x02 0x00 0x00 0x00&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is the format for the current time as hex bytes:&lt;br /&gt;
  &amp;lt;lsb of year&amp;gt; &amp;lt;msb of year&amp;gt; &amp;lt;month (1-12)&amp;gt; &amp;lt;day (1-31)&amp;gt; &amp;lt;hour (0-23)&amp;gt; &amp;lt;minute (0-59)&amp;gt; &amp;lt;seconds (0-59)&amp;gt; &amp;lt;weekday (1-7 where 1=Monday)&amp;gt; &amp;lt;fractions (1/256th of second)&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Is there a standard agreed method of pushing OTA updates so that one could seal the PineTime dev kit nicely? ==&lt;br /&gt;
&lt;br /&gt;
InfiniTime supports firmware updates over Bluetooth LE with the nRF Connect mobile app. See [https://lupyuen.github.io/pinetime-rust-mynewt/articles/cloud#download-and-test-our-pinetime-firmware &amp;quot;Download and Test Our PineTime Firmware&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
== My PineTime's screen shows garbage, how do I fix it? ==&lt;br /&gt;
&lt;br /&gt;
This is usually caused by unplugging the device after it has booted, it needs to be reinitialised. To do so just restart the watch by removing power to it.&lt;br /&gt;
&lt;br /&gt;
== I have experience developing on Arduino. How does the PineTime compare? ==&lt;br /&gt;
&lt;br /&gt;
To learn programming on PineTime, [https://lupyuen.github.io/pinetime-rust-mynewt/articles/cloud check out this article]&lt;br /&gt;
&lt;br /&gt;
Arduino provides the Arduino IDE (or you use the avr-gcc and avrdude command-line tools) which you can use to compile and upload code to an Arduino board. The PineTime and its ARM processor doesn't have this, so you'll have to familiarize yourself with tools like GCC for ARM, and OpenOCD. Some experience with Arduino does translate over to the PineTime, especially if you've worked with LCD's, or SPI. The PineTime is at least four times faster than an Arduino Uno (even faster at certain specific workloads due to hardware acceleration), and it has 32 times more RAM and 16 times more flash storage.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/lupyuen/ Lup Yuen Lee] (just call him Lup, rhymes with &amp;quot;Up&amp;quot;) has written many articles on PineTime programming. [https://lupyuen.github.io/ Check out the articles here]&lt;br /&gt;
&lt;br /&gt;
== Can I code firmware for PineTime without an actual PineTime? ==&lt;br /&gt;
&lt;br /&gt;
Yes, you may code PineTime Watch Faces and preview them in a web browser (thanks to WebAssembly)...&lt;br /&gt;
&lt;br /&gt;
[https://lupyuen.github.io/pinetime-rust-mynewt/articles/simulator PineTime Simulator]&lt;br /&gt;
&lt;br /&gt;
Then flash your firmware remotely to a real PineTime via Telegram, and watch your firmware run in a live video stream...&lt;br /&gt;
&lt;br /&gt;
[https://github.com/lupyuen/remote-pinetime-bot/blob/master/README.md Remote PineTime]&lt;br /&gt;
&lt;br /&gt;
== What do I need for building PineTime firmware locally on my computer? ==&lt;br /&gt;
&lt;br /&gt;
Most flavours of PineTime firmware (InfiniTime, Hypnos, Klok, wasp-os) will build fine on Linux (x64, Arm32, Arm64) and macOS. Just follow the instructions provided.&lt;br /&gt;
&lt;br /&gt;
Download version 9-2020-q2-update of the [https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads Arm Embedded Toolchain arm-none-eabi-gcc]. Other versions of gcc may have problems building the firmware correctly.&lt;br /&gt;
&lt;br /&gt;
On Windows, install [https://docs.microsoft.com/en-us/windows/wsl/about Windows Subsystem for Linux (WSL)] and execute the build steps inside the WSL Terminal (instead of the Windows Command Prompt). USB Programmers (like ST-Link and JLink) are not supported in WSL, so use the Windows Command Prompt to flash your built firmware to PineTime.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/lupyuen/pinetime-rust-mynewt/blob/master/README.md pinetime-rust-mynewt] firmware for PineTime supports building and flashing via the Windows Command Prompt (no need for MinGW and Docker).&lt;br /&gt;
&lt;br /&gt;
== Can I use Pinebook Pro for developing PineTime? ==&lt;br /&gt;
&lt;br /&gt;
Yes, use version 9-2020-q2-update of the [https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads Arm Embedded Toolchain arm-none-eabi-gcc]. Other versions of gcc may have problems building the firmware correctly.&lt;br /&gt;
&lt;br /&gt;
== What is ARM Semihosting? ==&lt;br /&gt;
&lt;br /&gt;
We use the SWD (Single Wire Debug) protocol created by ARM for flashing and debugging PineTime's nRF52832 microcontroller, which contains an ARM CPU. (SWD is derived from standard JTAG, but with fewer wires) With ARM CPUs you can trigger a software breakpoint, and allow the debugger (OpenOCD) to do something really nifty: Display a message, read console input, dump out a file, even read a file. That's called ARM Semihosting. [http://www.keil.com/support/man/docs/armcc/armcc_pge1358787046598.htm More about ARM Semihosting]&lt;br /&gt;
&lt;br /&gt;
== What is OpenOCD? ==&lt;br /&gt;
&lt;br /&gt;
OpenOCD is Open On-Chip Debugger. It's the software that drives your microcontroller debugger/flasher. We need it for running any kind of flashing and debugging with Pi or ST-Link. gdb talks to OpenOCD for debugging firmware. gdb also works with VSCode for debugging firmware visually. [http://openocd.org/doc-release/html/About.html#What-is-OpenOCD_003f More about OpenOCD]&lt;br /&gt;
&lt;br /&gt;
Please use [https://xpack.github.io/openocd xPack OpenOCD] with PineTime. Other versions of OpenOCD seem to have problems with PineTime.&lt;br /&gt;
&lt;br /&gt;
== How do I remove flash protection? ==&lt;br /&gt;
&lt;br /&gt;
PineTime watches shipped before 20 Sep 2020 have flash protection enabled.&lt;br /&gt;
&lt;br /&gt;
The flash protection can be removed using multiple different methods. If you don't have anything except the PineTime, not even a Raspberry Pi, then you have to order a programmer online: you can use a J-Link, CMSIS-DAP dongle and various other programmers. See [[Reprogramming_the_PineTime|this page to see various methods of reprogramming the PineTime]].&lt;br /&gt;
&lt;br /&gt;
If your PineTime was shipped after 20 Sep 2020, you don't need to remove flash protection. They are shipped with flash protection disabled. You can flash and debug PineTime right away with ST-Link, JLink and Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
== Why can't you use ST-Link to remove nRF52 Flash Protection? ==&lt;br /&gt;
&lt;br /&gt;
Because ST-Link is a High Level Adapter. It doesn't really implement all SWD functions, just a subset (probably to keep the price low). More details in the section &amp;quot;Why Visual Studio Code with ST-Link (instead of nRFgo Studio with J-LINK)&amp;quot; in the article [https://medium.com/@ly.lee/coding-nrf52-with-rust-and-apache-mynewt-on-visual-studio-code-9521bcba6004?source=friends_link&amp;amp;sk=bb4e2523b922d0870259ab3fa696c7da &amp;quot;Coding nRF52 with Rust and Apache Mynewt on Visual Studio Code&amp;quot;].&lt;br /&gt;
&lt;br /&gt;
== Since we need a low level SWD adapter like Raspberry Pi anyway, can we do everything on a Pi instead of ST-Link + Windows? ==&lt;br /&gt;
&lt;br /&gt;
Yes, Raspberry Pi works for flashing and debugging PineTime, even for removing flash protection. We have a special version of OpenOCD called OpenOCD SPI that talks to PineTime's SWD port over SPI (without bit-banging). See [https://github.com/lupyuen/pinetime-updater/blob/master/README.md PineTime Updater]&lt;br /&gt;
&lt;br /&gt;
== Is there a 3D model of PineTime available somewhere? ==&lt;br /&gt;
&lt;br /&gt;
Not yet. Someone did design a cover you can snap on to keep the back shut. [https://www.thingiverse.com/thing:4172849 More details]&lt;br /&gt;
&lt;br /&gt;
== Are there any alternatives to the wrist band provided with the PineTime? ==&lt;br /&gt;
&lt;br /&gt;
No, but PineTime accepts standard 20mm wrist band that is widely available by a third party.&lt;br /&gt;
&lt;br /&gt;
Note that some sellers have a different point of view on what standard is. So you should always check the fitting to make sure it looks like the one used by PineTime.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting PineTime's Bluetooth (InfiniTime firmware) ==&lt;br /&gt;
&lt;br /&gt;
Old (pre 1.4) InfiniTime firmware had an issue where Bluetooth connectivity sometimes gets lost/fails.&lt;br /&gt;
&lt;br /&gt;
The fix was to soft-reset the watch, by holding the PineTime button for ~8 seconds until the PineCone logo appears.&lt;br /&gt;
&lt;br /&gt;
== I'm stuck. How can I get help? ==&lt;br /&gt;
&lt;br /&gt;
Chat with the PineTime Community on [[PineTime#Community|Matrix / Discord / Telegram / IRC]] (They are bridged into a single chatroom)&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineTime_Hardware_Wishlist&amp;diff=11715</id>
		<title>PineTime Hardware Wishlist</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineTime_Hardware_Wishlist&amp;diff=11715"/>
		<updated>2021-10-25T09:22:08Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains a list of things people wish PineTime did differently&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
&lt;br /&gt;
* Long pressing the button should power-cycle the watch without any software being involved&lt;br /&gt;
* Other display technology could be explored.&lt;br /&gt;
**[//en.Wikipedia.org/wiki/Transflective_liquid-crystal_display A transflective LCD]&lt;br /&gt;
*** Increased readability in bright daylight&lt;br /&gt;
**[//en.wikipedia.org/wiki/OLED OLED]&lt;br /&gt;
*** Self-emissive display (pixels emit their own light)&lt;br /&gt;
*** Allows for lower power usage with mostly black screens&lt;br /&gt;
*** Allows for low power visual notifications (imagine an always-on small red square in the corner to indicate a notification)&lt;br /&gt;
* Touchscreen with configurable sensitivity&lt;br /&gt;
** Ideal for gloved fingers and water droplet resistance&lt;br /&gt;
** Preferably it should remain capacitive, as a resistive touchscreen would have too many trade-offs.&lt;br /&gt;
* A slightly bigger 256×256 pixel display&lt;br /&gt;
** This resolution is preferable for its binary alignment for low-level simplicity&lt;br /&gt;
** It has the property that its X and Y coordinates are each addressable with a single byte, with no bounds checking&lt;br /&gt;
** Its total number of pixels is a power of 2 (65536), and each pixel is addressable with exactly 2 bytes.&lt;br /&gt;
** The [http://Pelulamu.net/ibniz IBNIZ (Ideally Bare Numeric Impression giZmo) virtual machine], designed for minimalist demoscene graphics, has chosen 256×256 for its virtual display specifically for code efficiency.&lt;br /&gt;
** If PineTime also chose 256×256 then it would be a target platform for unclipped IBNIZ demoscene programmes, which would be really fun to play around with on one's wrist!&lt;br /&gt;
* Full screen refresh is very slow&lt;br /&gt;
** A full 16-bit redraw on the display takes at worst 120ms, which is 8Hz&lt;br /&gt;
** Modest optimization is possible by adopting 12-bit color&lt;br /&gt;
** A smooth scrolling/usage/animation experience would be 30Hz minimum, preferably 60hz&lt;br /&gt;
** Display redraw is currently bottlenecked by the nRF52832 maximum SPI clock (8MHz).&lt;br /&gt;
** The nRF528(33/40) has one high speed SPI master which supports 32MHz, still well below the ST7789 maximum&lt;br /&gt;
** Parallel data transfer could be an option, but using more GPIOs (which don't look available)&lt;br /&gt;
* Some sort of scroll wheel would be nice for convenience.&lt;br /&gt;
* Changed GPIO assignment so more functionality is available (i.e. NFC and VSYNC)&lt;br /&gt;
* Wireless charging, or Qi Charging capability&lt;br /&gt;
* nRF5840 update&lt;br /&gt;
** 32MHz HS SPI, QuadSPI, CryptoCell + Secure Key Storage, more RAM, a coprocessor and the possibility to expose USB through power pins&lt;br /&gt;
* Preferably a pre-certified MCU module with a ceramic antenna&lt;br /&gt;
* Version without sensors but maybe bigger battery&lt;br /&gt;
* Pins on the programmer connector to allow UART while developing (currently there is a TX test point on PCB). (Note: There's ARM SemiHosting, ITM and Segger RTT)&lt;br /&gt;
* Connect SDO of ST7889 LCD controller to MCU.&lt;br /&gt;
** Allows MCU to execute READ commands&lt;br /&gt;
** Possibility of leveraging ST7889 RAM to save MCU RAM?&lt;br /&gt;
* LCD must be centered on case. Currently is not and watchfaces seems different when clock is put on the other wrist.&lt;br /&gt;
* A NFC antenna around the case, connected to the NFC pins.&lt;br /&gt;
* Used sensors should be NDA-free and preferably also blob-free for easier development&lt;br /&gt;
** Possibly replace BMA421 accelerometer&lt;br /&gt;
*** The BMA421 doesn't have a public datasheet&lt;br /&gt;
*** Special attention should be paid to advanced features, such as step counting integration or flick detection.&lt;br /&gt;
* PineTime SoC could support USB or have a FTDI chip with the relevant pins exposed.&lt;br /&gt;
** It could allow flashing a sealed device, just like Arduinos work.&lt;br /&gt;
** Alternatively, an USB-C port could be added that provides these features. &lt;br /&gt;
* A bigger pulldown resistor for the power button&lt;br /&gt;
** 100k still leaks a noticeable amount of power when the button is always on.&lt;br /&gt;
* Ceramic Bluetooth antenna for better signal reception&lt;br /&gt;
* An external RTC circuit&lt;br /&gt;
** Allows the main MCU go to deep-sleep while retaining time.&lt;br /&gt;
** Allows time retention through MCU reset.&lt;br /&gt;
* Ultra low quiescent current PMIC&lt;br /&gt;
** In theory could provide a hard reset capability based on button press&lt;br /&gt;
** Better deep sleep/shipping/storage/off lifetime&lt;br /&gt;
*** A nano-power system timer IC could in theory provide a RTC, MOSFET-controlled deep sleep, watchdog timer and button-controlled reset&lt;br /&gt;
** Built-in &amp;quot;fuel gauge&amp;quot; for better estimation of battery capacity&lt;br /&gt;
* Small Piezo Buzzer&lt;br /&gt;
** Use case would be for very short beeps (think old-school casio watch) as notification.&lt;br /&gt;
** Of course developers can PWM other frequency to make it sing, but piezos tend to be shrill.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineTime_Hardware_Wishlist&amp;diff=11565</id>
		<title>PineTime Hardware Wishlist</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineTime_Hardware_Wishlist&amp;diff=11565"/>
		<updated>2021-10-03T14:43:03Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains a list of things people wish PineTime did differently&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
&lt;br /&gt;
* Long pressing the button should power-cycle the watch without any software being involved&lt;br /&gt;
* Other display technology could be explored.&lt;br /&gt;
**[//en.Wikipedia.org/wiki/Transflective_liquid-crystal_display A transflective LCD]&lt;br /&gt;
*** Increased readability in bright daylight&lt;br /&gt;
**[//en.wikipedia.org/wiki/OLED OLED]&lt;br /&gt;
*** Self-emissive display (pixels emit their own light)&lt;br /&gt;
*** Allows for lower power usage with mostly black screens&lt;br /&gt;
*** Allows for low power visual notifications (imagine an always-on small red square in the corner to indicate a notification)&lt;br /&gt;
* Touchscreen with configurable sensitivity&lt;br /&gt;
** Ideal for gloved fingers and water droplet resistance&lt;br /&gt;
** Preferably it should remain capacitive, as a resistive touchscreen would have too many trade-offs.&lt;br /&gt;
* A slightly bigger 256×256 pixel display&lt;br /&gt;
** This resolution is preferable for its binary alignment for low-level simplicity&lt;br /&gt;
** It has the property that its X and Y coordinates are each addressable with a single byte, with no bounds checking&lt;br /&gt;
** Its total number of pixels is a power of 2 (65536), and each pixel is addressable with exactly 2 bytes.&lt;br /&gt;
** The [http://Pelulamu.net/ibniz IBNIZ (Ideally Bare Numeric Impression giZmo) virtual machine], designed for minimalist demoscene graphics, has chosen 256×256 for its virtual display specifically for code efficiency.&lt;br /&gt;
** If PineTime also chose 256×256 then it would be a target platform for unclipped IBNIZ demoscene programmes, which would be really fun to play around with on one's wrist!&lt;br /&gt;
* Full screen refresh is very slow&lt;br /&gt;
** A full 16-bit redraw on the display takes at worst 120ms, which is 8Hz&lt;br /&gt;
** Modest optimization is possible by adopting 12-bit color&lt;br /&gt;
** A smooth scrolling/usage/animation experience would be 30Hz minimum, preferably 60hz&lt;br /&gt;
** Display redraw is currently bottlenecked by the nRF52832 maximum SPI clock (8MHz).&lt;br /&gt;
** The nRF528(33/40) has one high speed SPI master which supports 32MHz, still well below the ST7789 maximum&lt;br /&gt;
** Parallel data transfer could be an option, but using more GPIOs (which don't look available)&lt;br /&gt;
* Some sort of scroll wheel would be nice for convenience.&lt;br /&gt;
* Changed GPIO assignment so more functionality is available (i.e. NFC and VSYNC)&lt;br /&gt;
* Wireless charging, or Qi Charging capability&lt;br /&gt;
* An external RTC circuit&lt;br /&gt;
** Allows the main MCU go to deep-sleep while retaining time.&lt;br /&gt;
** Allows time retention through MCU reset.&lt;br /&gt;
* nRF5840 update&lt;br /&gt;
** 32MHz HS SPI, QuadSPI, CryptoCell + Secure Key Storage, more RAM, a coprocessor and the possibility to expose USB through power pins&lt;br /&gt;
* Preferably a pre-certified MCU module with a ceramic antenna&lt;br /&gt;
* Version without sensors but maybe bigger battery&lt;br /&gt;
* Pins on the programmer connector to allow UART while developing (currently there is a TX test point on PCB). (Note: There's ARM SemiHosting, ITM and Segger RTT)&lt;br /&gt;
* Connect SDO of ST7889 LCD controller to MCU.&lt;br /&gt;
** Allows MCU to execute READ commands&lt;br /&gt;
** Possibility of leveraging ST7889 RAM to save MCU RAM?&lt;br /&gt;
* LCD must be centered on case. Currently is not and watchfaces seems different when clock is put on the other wrist.&lt;br /&gt;
* A NFC antenna around the case, connected to the NFC pins.&lt;br /&gt;
* Used sensors should be NDA-free and preferably also blob-free for easier development&lt;br /&gt;
** Possibly replace BMA421 accelerometer&lt;br /&gt;
*** The BMA421 doesn't have a public datasheet&lt;br /&gt;
*** Special attention should be paid to advanced features, such as step counting integration or flick detection.&lt;br /&gt;
* PineTime SoC could support USB or have a FTDI chip with the relevant pins exposed.&lt;br /&gt;
** It could allow flashing a sealed device, just like Arduinos work.&lt;br /&gt;
** Alternatively, an USB-C port could be added that provides these features. &lt;br /&gt;
* A bigger pulldown resistor for the power button&lt;br /&gt;
** 100k still leaks a noticeable amount of power when the button is always on.&lt;br /&gt;
* Ceramic Bluetooth antenna for better signal reception&lt;br /&gt;
* Ultra low quiescent current PMIC&lt;br /&gt;
** Better deep sleep/shipping/storage/off lifetime&lt;br /&gt;
** Built-in &amp;quot;fuel gauge&amp;quot; for better estimation of battery capacity&lt;br /&gt;
* Small Piezo Buzzer&lt;br /&gt;
** Use case would be for very short beeps (think old-school casio watch) as notification.&lt;br /&gt;
** Of course developers can PWM other frequency to make it sing, but piezos tend to be shrill.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineTime_Hardware_Wishlist&amp;diff=11563</id>
		<title>PineTime Hardware Wishlist</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineTime_Hardware_Wishlist&amp;diff=11563"/>
		<updated>2021-10-03T14:09:05Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains a list of things people wish PineTime did differently&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
&lt;br /&gt;
* Long pressing the button should power-cycle the watch without any software being involved&lt;br /&gt;
* Other display tech could be explored. [//en.Wikipedia.org/wiki/Transflective_liquid-crystal_display A transflective LCD] would probably be a nice option. Or potentially OLED?&lt;br /&gt;
* Touchscreen should possibly have a configurable sensitivity level for both glove-wearing and droplet-resistance. Preferably it should still be a capacitive one, a resistive touchscreen would have too many trade-offs.&lt;br /&gt;
* A slightly bigger 256×256 pixel graphics display size is preferable for its binary alignment, affording some low-level simplicity – it has the property that its X and Y coordinates are each addressable with a single byte, with no out-of-bounds; its total number of pixels is 65536 (another power of 2), and each pixel is addressable with exactly 2 bytes, with perfect efficiency. The [http://Pelulamu.net/ibniz IBNIZ (Ideally Bare Numeric Impression giZmo) virtual machine], designed for fun minimalist demoscene graphics, has chosen 256×256 for its virtual display, and makes use of these simplicity advantages. If PineTime also chose 256×256 then it would be a target platform for unclipped IBNIZ demoscene programmes, which would be really fun to play around with on one's wrist!&lt;br /&gt;
* A full 16-bit redraw on the display takes 120ms at the very least, which is 8Hz (although modest optimization is possible by adopting 12-bit color). A smooth scrolling/usage/animation experience would be 30Hz minimum, preferably 60. Display redraw is currently bottlenecked by the nRF52832 maximum SPI clock (8MHz).&lt;br /&gt;
* Some sort of scroll wheel would be nice for convenience.&lt;br /&gt;
* Changed GPIO assignment so more functionality is available (i.e. NFC and VSYNC)&lt;br /&gt;
* Wireless charging, or Qi Charging capability&lt;br /&gt;
* An external RTC circuit saving the current time to allow the main MCU go to deep-sleep.&lt;br /&gt;
* nRF5840 update: QSPI, CryptoCell + Secure Key Storage, has more RAM, a coprocessor and the possibility to expose USB through power pins&lt;br /&gt;
* Preferably a pre-certified MCU module with a ceramic antenna&lt;br /&gt;
* Version without sensors but maybe bigger battery&lt;br /&gt;
* A couple of pins on the programmer connector to allow UART while developing (currently there is a TX test point on PCB). (Note: There's ARM SemiHosting, ITM and Segger RTT)&lt;br /&gt;
* Connect the pin of LCD controller that allows RD/WR from it in order to save RAM on the MCU. (The MOSI pin for the SPI is already connected to the nor flash that shares the same pins, pin number is P0.04)&lt;br /&gt;
* LCD must be centered on case. Currently is not and watchfaces seems different when clock is put on the other wrist.&lt;br /&gt;
* A NFC antenna around the case, connected to the NFC pins.&lt;br /&gt;
* Used sensors should be NDA-free and preferably also blob-free. For example the BMA421 accelerometer doesn't have a datasheet (it seems private to some hardware integrators): a more open one would be much easier to develop for. Special attention should be paid to advanced features, such as step counting integration or flick detection.&lt;br /&gt;
* PineTime SoC could support USB or have a FTDI chip with the relevant pins exposed. It could allow flashing a sealed device, just like Arduinos work. * An USB-C connector instead of a magnetic one could be used.&lt;br /&gt;
* A bigger pulldown resistor for the power button, because 100k still leaks a noticeable amount of power when the button is always on.&lt;br /&gt;
* Ceramic Bluetooth antenna for better signal reception&lt;br /&gt;
* Ultra low quiescent current PMIC for better deep sleep. Better shipping/storage/turned off mode. Preferably also a built-in &amp;quot;fuel gauge&amp;quot; functionality for better estimation of battery capacity&lt;br /&gt;
* A separate RTC or built-in functionality in the main MCU to maintain time setting through MCU reset&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineTime_Hardware_Wishlist&amp;diff=11562</id>
		<title>PineTime Hardware Wishlist</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineTime_Hardware_Wishlist&amp;diff=11562"/>
		<updated>2021-10-03T14:08:41Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains a list of things people wish PineTime did differently&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
&lt;br /&gt;
* Long pressing the button should power-cycle the watch without any software being involved&lt;br /&gt;
* Other display tech could be explored. [//en.Wikipedia.org/wiki/Transflective_liquid-crystal_display A transflective LCD] would probably be a nice option. Or potentially OLED?&lt;br /&gt;
* Touchscreen should possibly have a configurable sensitivity level for both glove-wearing and droplet-resistance. Preferably it should still be a capacitive one, a resistive touchscreen would have too many trade-offs.&lt;br /&gt;
* A slightly bigger 256×256 pixel graphics display size is preferable for its binary alignment, affording some low-level simplicity – it has the property that its X and Y coordinates are each addressable with a single byte, with no out-of-bounds; its total number of pixels is 65536 (another power of 2), and each pixel is addressable with exactly 2 bytes, with perfect efficiency. The [http://Pelulamu.net/ibniz IBNIZ (Ideally Bare Numeric Impression giZmo) virtual machine], designed for fun minimalist demoscene graphics, has chosen 256×256 for its virtual display, and makes use of these simplicity advantages. If PineTime also chose 256×256 then it would be a target platform for unclipped IBNIZ demoscene programmes, which would be really fun to play around with on one's wrist!&lt;br /&gt;
* A full 16-bit redraw on the display takes 120ms at the very least, which is 8Hz (although modest optimization is possible by adopting 12-bit color). A smooth scrolling/usage/animation experience would be 30Hz minimum, preferably 60. Display redraw is currently bottlenecked by the nRF52832 maximum SPI clock (8MHz).&lt;br /&gt;
* Some sort of scroll wheel would be nice for convenience.&lt;br /&gt;
* Changed GPIO assignment so more functionality is available (i.e. NFC and VSYNC)&lt;br /&gt;
* Wireless charging, or Qi Charging capability&lt;br /&gt;
* An external RTC circuit saving the current time to allow the main MCU go to deep-sleep.&lt;br /&gt;
* nRF5840 update: QSPI, CryptoCell + Secure Key Storage, has more RAM, a coprocessor and the possibility to expose USB through power pins&lt;br /&gt;
* Preferably a pre-certified MCU module with a ceramic antenna&lt;br /&gt;
* Version without sensors but maybe bigger battery&lt;br /&gt;
* A couple of pins on the programmer connector to allow UART while developing (currently there is a TX test point on PCB). (Note: There's ARM SemiHosting, ITM and Segger RTT)&lt;br /&gt;
* Connect the pin of LCD controller that allows RD/WR from it in order to save RAM on the MCU. (The MOSI pin for the SPI is already connected to the nor flash that shares the same pins, pin number is P0.04)&lt;br /&gt;
* LCD must be centered on case. Currently is not and watchfaces seems different when clock is put on the other wrist.&lt;br /&gt;
* A NFC antenna around the case, connected to the NFC pins.&lt;br /&gt;
* Used sensors should be NDA-free and preferably also blob-free. For example the BMA421 accelerometer doesn't have a datasheet (it seems private to some hardware integrators): a more open one would be much easier to develop for. Special attention should be paid to advanced features, such as step counting integration or flick detection.&lt;br /&gt;
* PineTime SoC could support USB or have a FTDI chip with the relevant pins exposed. It could allow flashing a sealed device, just like Arduinos work. * An USB-C connector instead of a magnetic one could be used.&lt;br /&gt;
* A bigger pulldown resistor for the power button, because 100k still leaks a noticeable amount of power when the button is always on.&lt;br /&gt;
* Ceramic Bluetooth antenna for better signal reception&lt;br /&gt;
* Ultra low quiescent current PMIC for better deep sleep. Better shipping/storage/turned off mode&lt;br /&gt;
* A separate RTC or built-in functionality in the main MCU to maintain time setting through MCU reset&lt;br /&gt;
* Battery charger IC with built-in &amp;quot;fuel gauge&amp;quot; functionality for better estimation of battery capacity&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineTime_Hardware_Wishlist&amp;diff=11561</id>
		<title>PineTime Hardware Wishlist</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineTime_Hardware_Wishlist&amp;diff=11561"/>
		<updated>2021-10-03T14:07:46Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains a list of things people wish PineTime did differently&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
&lt;br /&gt;
* Long pressing the button should power-cycle the watch without any software being involved&lt;br /&gt;
* Other display tech could be explored. [//en.Wikipedia.org/wiki/Transflective_liquid-crystal_display A transflective LCD] would probably be a nice option. Or potentially OLED?&lt;br /&gt;
* Touchscreen should possibly have a configurable sensitivity level for both glove-wearing and droplet-resistance. Preferably it should still be a capacitive one, a resistive touchscreen would have too many trade-offs.&lt;br /&gt;
* A slightly bigger 256×256 pixel graphics display size is preferable for its binary alignment, affording some low-level simplicity – it has the property that its X and Y coordinates are each addressable with a single byte, with no out-of-bounds; its total number of pixels is 65536 (another power of 2), and each pixel is addressable with exactly 2 bytes, with perfect efficiency. The [http://Pelulamu.net/ibniz IBNIZ (Ideally Bare Numeric Impression giZmo) virtual machine], designed for fun minimalist demoscene graphics, has chosen 256×256 for its virtual display, and makes use of these simplicity advantages. If PineTime also chose 256×256 then it would be a target platform for unclipped IBNIZ demoscene programmes, which would be really fun to play around with on one's wrist!&lt;br /&gt;
* A full 16-bit redraw on the display takes 120ms at the very least, which is 8Hz (although modest optimization is possible by adopting 12-bit color). A smooth scrolling/usage/animation experience would be 30Hz minimum, preferably 60. Display redraw is currently bottlenecked by the nRF52832 maximum SPI clock (8MHz).&lt;br /&gt;
* Some sort of scroll wheel would be nice for convenience.&lt;br /&gt;
* Changed GPIO assignment so more functionality is available (i.e. NFC and VSYNC)&lt;br /&gt;
* Wireless charging, or Qi Charging capability&lt;br /&gt;
* An external RTC circuit saving the current time to allow the main MCU go to deep-sleep.&lt;br /&gt;
* nRF5840 update: QSPI, CryptoCell + Secure Key Storage, has more RAM, a coprocessor and the possibility to expose USB through power pins&lt;br /&gt;
* Preferably a pre-certified MCU module with a ceramic antenna&lt;br /&gt;
* Version without sensors but maybe bigger battery&lt;br /&gt;
* A couple of pins on the programmer connector to allow UART while developing (currently there is a TX test point on PCB). (Note: There's ARM SemiHosting, ITM and Segger RTT)&lt;br /&gt;
* Connect the pin of LCD controller that allows RD/WR from it in order to save RAM on the MCU. (The MOSI pin for the SPI is already connected to the nor flash that shares the same pins, pin number is P0.04)&lt;br /&gt;
* LCD must be centered on case. Currently is not and watchfaces seems different when clock is put on the other wrist.&lt;br /&gt;
* A NFC antenna around the case, connected to the NFC pins.&lt;br /&gt;
* Used sensors should be NDA-free and preferably also blob-free. For example the BMA421 accelerometer doesn't have a datasheet (it seems private to some hardware integrators): a more open one would be much easier to develop for. Special attention should be paid to advanced features, such as step counting integration or flick detection.&lt;br /&gt;
* PineTime SoC could support USB or have a FTDI chip with the relevant pins exposed. It could allow flashing a sealed device, just like Arduinos work. * An USB-C connector instead of a magnetic one could be used.&lt;br /&gt;
* A bigger pulldown resistor for the power button, because 100k still leaks a noticeable amount of power when the button is always on.&lt;br /&gt;
* Ceramic Bluetooth antenna for better signal reception&lt;br /&gt;
* Ultra low quiescent current PMIC for better deep sleep. Better shipping/storage/turned off mode&lt;br /&gt;
* Separate RTC chip to maintain time setting through MCU reset&lt;br /&gt;
* Battery charger IC with built-in &amp;quot;fuel gauge&amp;quot; functionality for better estimation of battery capacity&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Reprogramming_the_PineTime&amp;diff=10932</id>
		<title>Reprogramming the PineTime</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Reprogramming_the_PineTime&amp;diff=10932"/>
		<updated>2021-07-28T21:00:10Z</updated>

		<summary type="html">&lt;p&gt;Avamander: /* Uploading new software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The PineTime Dev Kit comes with the back not glued down to allow it to be easily reprogrammed, however the kit does not include an hardware programmer/debugger. &lt;br /&gt;
&lt;br /&gt;
'''Before you can use your debugger/programmer, you probably have to [[PineTime devkit wiring|wire up your pinetime]]. Heavily recommended you read this first!'''&lt;br /&gt;
&lt;br /&gt;
There is a bewildering variety of different hardware programmers available but whatever programmer you have there are only a few tasks you will have to learn about:&lt;br /&gt;
&lt;br /&gt;
* Unlocking the device '''Note: PineTime watches shipped after 20 Sep 2020 do not require unlocking. They are shipped unlocked.'''&lt;br /&gt;
* Uploading new software&lt;br /&gt;
* Running a debugger&lt;br /&gt;
&lt;br /&gt;
All of these are described in this article. &lt;br /&gt;
&lt;br /&gt;
Unlocking the device is a one-time action that is needed to enable the debug port and provide full access to the device. Unlocking the device will erase all existing software from the internal flash.&lt;br /&gt;
&lt;br /&gt;
= SWD Pinout =&lt;br /&gt;
 	&lt;br /&gt;
See [[PineTime devkit wiring|PineTime devkit wiring]]&lt;br /&gt;
&lt;br /&gt;
= nrfjprog (for Segger JLink) =&lt;br /&gt;
&lt;br /&gt;
The following steps have been tested with the Segger JLink embedded in the [https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52-DK NRF52-DK development board].&lt;br /&gt;
&lt;br /&gt;
=== Hookup ===&lt;br /&gt;
&lt;br /&gt;
Connect the Pinetime SWD pins to the debugger (P20 on NRF52-DK)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pinetime&lt;br /&gt;
!JLink&lt;br /&gt;
|-&lt;br /&gt;
|GND&lt;br /&gt;
|GND&lt;br /&gt;
|-&lt;br /&gt;
|SWDCLK&lt;br /&gt;
|SWDCLK&lt;br /&gt;
|-&lt;br /&gt;
|SWDIO&lt;br /&gt;
|SWDIO&lt;br /&gt;
|-&lt;br /&gt;
|VCC (3.3V)&lt;br /&gt;
|VTG (target detect)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Unlocking the FLASH ===&lt;br /&gt;
&lt;br /&gt;
Unlocking the device and erase the memory. &lt;br /&gt;
&lt;br /&gt;
'''You need to execute this step only once, to remove the read protection on the memory. Note that it will erase the whole flash memory of the MCU!''' :&lt;br /&gt;
 &lt;br /&gt;
 nrfjprog -f NRF52 --recover&lt;br /&gt;
&lt;br /&gt;
=== Uploading new software ===&lt;br /&gt;
&lt;br /&gt;
1. Program the BLE softdevice (if needed by the firmware). Replace PATH_TO_NRF_SDK by the path where you unzipped the [https://www.nordicsemi.com/Software-and-Tools/Software/nRF5-SDK NRF52 SDK] :&lt;br /&gt;
&lt;br /&gt;
 nrfjprog -f NRF52 --program /PATH_TO_NRF_SDK/components/softdevice/s132/hex/s132_nrf52_6.1.1_softdevice.hex --sectorerase&lt;br /&gt;
&lt;br /&gt;
2. Program the firmware (replace firmware.hex by the actual filename of the firmware):&lt;br /&gt;
&lt;br /&gt;
 nrfjprog -f NRF52 --program firmware.hex --sectorerase&lt;br /&gt;
&lt;br /&gt;
3. Reset and run the new firmware:&lt;br /&gt;
 &lt;br /&gt;
 nrfjprog -f NRF52 --reset&lt;br /&gt;
&lt;br /&gt;
= OpenOCD =&lt;br /&gt;
&lt;br /&gt;
OpenOCD, the Open On-Chip Debugger supports multiple different adapters. You can read more about it here: http://openocd.org/&lt;br /&gt;
&lt;br /&gt;
== Adapters ==&lt;br /&gt;
&lt;br /&gt;
These examples allow you to use telnet to issue futher commands to the devkit. Using them you can connect to ''127.0.0.1'' (''localhost'') port ''4444'' using telnet and invoke OpenOCD commands. GDB should also be available on port ''3333''.&lt;br /&gt;
&lt;br /&gt;
You can simplify your life by creating a configuration file that contains the interface, transport, target and speed configuration. Things like CLion also need one to work properly.&lt;br /&gt;
&lt;br /&gt;
If you aren't using the latest version of OpenOCD, you might need to substitute things in these examples with older syntax (e.g. instead of ''adapter speed'' it's ''adapter_khz'').&lt;br /&gt;
&lt;br /&gt;
=== CMSIS-DAP ===&lt;br /&gt;
&lt;br /&gt;
Issue this command to initialize a connection to the devkit:&lt;br /&gt;
&lt;br /&gt;
 openocd \&lt;br /&gt;
    -c 'source [find interface/cmsis-dap.cfg]' \&lt;br /&gt;
    -c 'transport select swd' \&lt;br /&gt;
    -c 'source [find target/nrf52.cfg]' \&lt;br /&gt;
    -c 'adapter speed 8000' \&lt;br /&gt;
    -c 'init'&lt;br /&gt;
&lt;br /&gt;
=== JLink ===&lt;br /&gt;
&lt;br /&gt;
Start OpenOCD:&lt;br /&gt;
&lt;br /&gt;
 openocd \&lt;br /&gt;
    -c 'source [find interface/jlink.cfg]' \&lt;br /&gt;
    -c 'transport select swd' \&lt;br /&gt;
    -c 'source [find target/nrf52.cfg]' \&lt;br /&gt;
    -c 'adapter speed 8000' \&lt;br /&gt;
    -c 'init'&lt;br /&gt;
&lt;br /&gt;
=== Raspberry Pi ===&lt;br /&gt;
&lt;br /&gt;
 openocd \&lt;br /&gt;
    -c 'source bcm2835spi' \&lt;br /&gt;
    -c 'bcm2835spi_speed 31200' \&lt;br /&gt;
    -c 'source [find target/nrf52.cfg]' \&lt;br /&gt;
    -c 'init'&lt;br /&gt;
&lt;br /&gt;
=== STLink ===&lt;br /&gt;
&lt;br /&gt;
Connect PineTime SWD Pins to ST-Link v2 as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!PineTime&lt;br /&gt;
!ST-Link&lt;br /&gt;
|-&lt;br /&gt;
|GND&lt;br /&gt;
|GND&lt;br /&gt;
|-&lt;br /&gt;
|SWDCLK&lt;br /&gt;
|SWDCLK&lt;br /&gt;
|-&lt;br /&gt;
|SWDIO&lt;br /&gt;
|SWDIO&lt;br /&gt;
|-&lt;br /&gt;
|VCC (3.3V)&lt;br /&gt;
|3.3V&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:pinetime-stlink.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
Note that only the bottom row of pins on ST-Link are used.&lt;br /&gt;
&lt;br /&gt;
To flash PineTime with ST-Link on Linux and macOS, use [https://github.com/lupyuen/pinetime-updater/blob/master/README.md PineTime Updater]&lt;br /&gt;
&lt;br /&gt;
[[PineTime FAQ|'''ST-Link can't be used to remove nRF52 flash protection''']]&lt;br /&gt;
&lt;br /&gt;
== Unlocking the device ==&lt;br /&gt;
&lt;br /&gt;
If you need to disable access port protection then you can do this using the following commands below.&lt;br /&gt;
&lt;br /&gt;
This can be done in two ways:&lt;br /&gt;
&lt;br /&gt;
Appending this to OpenOCD command line:&lt;br /&gt;
&lt;br /&gt;
  -c 'nrf52.dap apreg 1 0x04' -c 'nrf52.dap apreg 1 0x04 0x01' -c 'nrf52.dap apreg 1 0x04'&lt;br /&gt;
&lt;br /&gt;
Or by using the telnet connection, just type in ''telnet localhost 4444'' and then you can issue commands to OpenOCD:&lt;br /&gt;
&lt;br /&gt;
Note: ''Unlocking the device to remove access port protection will erase the contents of flash.''&lt;br /&gt;
&lt;br /&gt;
  telnet localhost 4444&lt;br /&gt;
    Trying 127.0.0.1...&lt;br /&gt;
    Connected to localhost.&lt;br /&gt;
    Escape character is '^]'.&lt;br /&gt;
    Open On-Chip Debugger&lt;br /&gt;
    &amp;gt; nrf52.dap apreg 1 0x04&lt;br /&gt;
    0x00000000&lt;br /&gt;
    &amp;gt; nrf52.dap apreg 1 0x04 0x01&lt;br /&gt;
    &amp;gt; nrf52.dap apreg 1 0x04&lt;br /&gt;
    0x00000001&lt;br /&gt;
&lt;br /&gt;
(If the ''nrf52.dap'' command cannot be found, try just ''dap'' instead.)&lt;br /&gt;
&lt;br /&gt;
== Uploading new software ==&lt;br /&gt;
&lt;br /&gt;
Just issue this command, replace ''code.hex'' with your own (and cmsis-dap.cfg with an appropriate adapter).&lt;br /&gt;
&lt;br /&gt;
  openocd \&lt;br /&gt;
      -c 'source [find interface/cmsis-dap.cfg]' \&lt;br /&gt;
      -c 'transport select swd' \&lt;br /&gt;
      -c 'source [find target/nrf52.cfg]' \&lt;br /&gt;
      -c 'init' \&lt;br /&gt;
      -c 'halt' \&lt;br /&gt;
      -c 'nrf5 mass_erase' \&lt;br /&gt;
      -c 'program code.hex verify' \&lt;br /&gt;
      -c 'reset' \&lt;br /&gt;
      -c 'exit'&lt;br /&gt;
&lt;br /&gt;
= Black Magic Probe =&lt;br /&gt;
&lt;br /&gt;
BlackMagic Probe is an JTAG/SWD adapter with open-source firmware, allowing for it to be ported to a multitude of different boards. One of it's defining features is lack of need for intermediate software such as OpenOCD - one would just need to connect to the GDB server running on the chip and proceed with debugging. For more information, refer to [https://github.com/blacksphere/blackmagic/wiki wiki].&lt;br /&gt;
&lt;br /&gt;
=== Native adapters ===&lt;br /&gt;
&lt;br /&gt;
The native adapters are the official Black Magic family of debug adapters, including the original Black Magic Probe and the Black Magic Probe Mini. By buying the official hardware you are supporting the continued development of the Black Magic Probe software.&lt;br /&gt;
&lt;br /&gt;
Providing your native adapter is running up-to-date firmware then it can be used to program your PineTime.&lt;br /&gt;
&lt;br /&gt;
=== STM32 (Blue Pill) ===&lt;br /&gt;
&lt;br /&gt;
It is possible to flash a popular development board based on STM32F103C8T6 microcontroller, known as Blue Pill, to make a BlackMagic Probe device. For example, one may follow instructions in [https://forum.pine64.org/showthread.php?tid=8816&amp;amp;pid=57095#pid57095 forum post] or [https://gist.github.com/darnel/dac1370d057e176386ca4026418abc2b gist] (mac os). Also, it is possible to use SWD pins on the board to flash other devices, instead using arbitrary pins on the board itself. See [https://buger.dread.cz/black-magic-probe-bmp-on-bluepill-stm32f103c8-minimum-system-development-board.html this link] for more detals.&lt;br /&gt;
&lt;br /&gt;
=== Other hardware ===&lt;br /&gt;
&lt;br /&gt;
The Black Magic Probe firmware can be run on a variety of host devices. See [https://github.com/blacksphere/blackmagic/wiki/Debugger-Hardware BMP Debugger Hardware] for more information.&lt;br /&gt;
&lt;br /&gt;
=== Using the BMP to flash the PineTime ===&lt;br /&gt;
&lt;br /&gt;
Refer to the BMP [https://github.com/blacksphere/blackmagic/wiki/Useful-GDB-commands wiki] for the full description of commands.&lt;br /&gt;
Overall, the process on Linux is like following. (/dev/ttyBmpGdb is a symlink created by the udev rule). It's useful to create a gdb script file (or .gdbinit) with following commands:&lt;br /&gt;
&lt;br /&gt;
  target extended-remote /dev/ttyBmpGdb&lt;br /&gt;
  monitor swdp_scan&lt;br /&gt;
  attach 1&lt;br /&gt;
  file %firmware file%&lt;br /&gt;
&lt;br /&gt;
Then one may use '''load''' command to flash the firmware, '''compare-sections''' to verify the upload, or '''monitor erase_mass''' to erase the firmware. &lt;br /&gt;
&lt;br /&gt;
Then, proceed with debugging as normal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= External links and additional tutorials = &lt;br /&gt;
&lt;br /&gt;
* https://github.com/jlukanc1/pinetime-boot-flasher&lt;br /&gt;
* https://blog.aegrel.ee/absniffer-cmsis-dap-sniffer.html&lt;br /&gt;
* https://blog.dbrgn.ch/2020/5/16/nrf52-unprotect-flash-jlink-openocd/&lt;br /&gt;
* https://medium.com/@ly.lee/openocd-on-raspberry-pi-better-with-swd-on-spi-7dea9caeb590&lt;br /&gt;
* https://medium.com/@ly.lee/build-and-flash-rust-mynewt-firmware-for-pinetime-smart-watch-5e14259c55&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineTimeStyle&amp;diff=10915</id>
		<title>PineTimeStyle</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineTimeStyle&amp;diff=10915"/>
		<updated>2021-07-24T18:06:21Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=PineTimeStyle Watchface=&lt;br /&gt;
PineTimeStyle is a watchface created for Infinitime and is expected to be included in version 1.3 of Infinitime.&lt;br /&gt;
&lt;br /&gt;
It is based on [https://www.dantilden.com/projects/timestyle/ TimeStyle for Pebble by Dan Tilden] with permission.&lt;br /&gt;
&lt;br /&gt;
[[File:PineTimeStyle.jpg|PineTimeStyle watchface]]&lt;br /&gt;
&lt;br /&gt;
==Layout==&lt;br /&gt;
The time is displayed on the left in either 12 or 24h format depending on the system setting.&lt;br /&gt;
&lt;br /&gt;
In the sidebar on the right there is a battery icon which displays the current charge level, and is replaced by a plug icon when charging. Below it is a bluetooth icon which appears only when bluetooth is connected. &lt;br /&gt;
&lt;br /&gt;
The current date is displayed in the middle, and at the bottom there is a small gauge which displays the step count. The gauge scales automatically based on the configured step goal, and the outside of the gauge will turn white when the step goal is reached.&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Pinecil&amp;diff=10855</id>
		<title>Pinecil</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Pinecil&amp;diff=10855"/>
		<updated>2021-07-01T10:47:13Z</updated>

		<summary type="html">&lt;p&gt;Avamander: /* Specifications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overall description ==&lt;br /&gt;
[[File:Pinecil-bb2-01_rotate.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
The Pinecil is a portable, temperature controlled soldering iron. It also has the intended use of being a Risc-V development device using a breakout board. It's main features are:&lt;br /&gt;
&lt;br /&gt;
* Portability&lt;br /&gt;
* Settable temperature&lt;br /&gt;
* Soldering tips:&lt;br /&gt;
** Replaceable&lt;br /&gt;
** More than half a dozen available. Currently sold as 2 separate sets of 4, one fine set, the other larger.&lt;br /&gt;
** Compatible with TS100&lt;br /&gt;
* Flexible power sources:&lt;br /&gt;
** Barrel jack&lt;br /&gt;
** USB Type C power delivery&lt;br /&gt;
&lt;br /&gt;
There are additional features that include (Useful for devkit use):&lt;br /&gt;
&lt;br /&gt;
* A Programmable Gigadevice Risc-V GD32V embedded processor&lt;br /&gt;
* 0.67&amp;quot; Monochrome Display that can render text or graphics&lt;br /&gt;
* Support for Idle detection, for automatic power down of tip&lt;br /&gt;
&lt;br /&gt;
== Use ==&lt;br /&gt;
&lt;br /&gt;
Pinecil comes with a separate heating element / tip. After inserting its barrel into the end of the handle, lightly tighten the screw onto it. Loosen this screw when changing out the tip.&lt;br /&gt;
&lt;br /&gt;
The USB port, connected to any host, provides enough power to drive the user interface, but not necessarily enough to heat the tip. 5 volts from a USB 2 port will only display the user interface.&lt;br /&gt;
&lt;br /&gt;
To check the firmware version, hold down the &amp;quot;-&amp;quot; button. It will display something like &amp;quot;v2.14.2425902 17-01-21&amp;quot;, suggesting its actual release date, here 2021-01-17. Clicking the &amp;quot;+&amp;quot; button repeatedly reveals various internal settings, such as hardware version, current temperature, time since power-on, and number of motions detected. Clicking &amp;quot;-&amp;quot; returns to the regular display of current temperature, target temperature, and supply voltage. At other times it may show power draw.&lt;br /&gt;
&lt;br /&gt;
To actually heat up the tip, you will need a power supply that can provide 12V or more. This may be a dedicated power supply with a standard barrel connector (+ center, - outside) that supplies anywhere from 12V to 21V, or a USB-C supply that can negotiate up to such a voltage. (You probably have a suitable supply disused in a box somewhere.)&lt;br /&gt;
&lt;br /&gt;
Clicking &amp;quot;+&amp;quot; starts the tip heating. The display then shows power draw, current temperature, supply voltage, and estimated time to reach target temperature. You can adjust the target temperature with further clicks of &amp;quot;+&amp;quot; and &amp;quot;-&amp;quot; buttons. Waiting for the regular display to return, then holding down &amp;quot;-&amp;quot; for a moment turns the heat off. You can watch the temperature measurement go up and down. Certain settings involve holding down both buttons.&lt;br /&gt;
&lt;br /&gt;
The iron will &amp;quot;sleep&amp;quot;, switching to a lower temperature, after it has been put down for a short time, and heat up again when it is picked up.&lt;br /&gt;
&lt;br /&gt;
Clicking &amp;quot;-&amp;quot; when heat is off steps through menus to control a variety of settings, such as the sleep temperature, time until sleep, motion sensitivity, temperature units (C or F) etc.&lt;br /&gt;
&lt;br /&gt;
'''Menu Items''' items (accurate for firmware 2.1.14)&lt;br /&gt;
&lt;br /&gt;
* Power Source &lt;br /&gt;
**(cutoff choices for voltage and battery operation)&lt;br /&gt;
* QC voltage   &lt;br /&gt;
**(voltage to negotiate for with QC chargers (9, 12, 20 volts)&lt;br /&gt;
* Soldering Settings&lt;br /&gt;
** Boost Temperature&lt;br /&gt;
** Auto Start&lt;br /&gt;
** Temperature Change (short click)&lt;br /&gt;
** Temperature Change (long click)&lt;br /&gt;
** Allow Lock (when soldering)&lt;br /&gt;
* Sleep Settings&lt;br /&gt;
** Sleep Temperature&lt;br /&gt;
** Sleep Timeout&lt;br /&gt;
** Shutdown Time&lt;br /&gt;
** Motion Sensor Sensitivity&lt;br /&gt;
** Hall Sensor Sensitivity&lt;br /&gt;
* User Interface&lt;br /&gt;
** Temperature Units (C/F)&lt;br /&gt;
** Display orientation (right/left)&lt;br /&gt;
** Cooldown Blink&lt;br /&gt;
** Scroll Speed (slow/fast)&lt;br /&gt;
** Reverse +/- buttons&lt;br /&gt;
* Advanced Options&lt;br /&gt;
** Power Limit (watts)&lt;br /&gt;
** Detailed Idle Screen&lt;br /&gt;
** Detailed Solder Screen&lt;br /&gt;
** Factory Reset?&lt;br /&gt;
** Calibrate Temperature&lt;br /&gt;
** Calibrate Voltage&lt;br /&gt;
** Power Pulse (watts)&lt;br /&gt;
&lt;br /&gt;
== Pictures ==&lt;br /&gt;
&lt;br /&gt;
Pre-release:&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Pinecil_Exploded_Diagram_ver_0.9.png|Pinecil renders|alt=alt language&lt;br /&gt;
File:PinecilPrototype.jpg|Pinecil prototype|alt=alt language&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Production:&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Pinecil-bb2-01.jpg|Pinecil and TS-B2 retail package|alt=alt language&lt;br /&gt;
File:Pinecil-Case-Red-1.jpg|Pinecil red casing|alt=alt language&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pinecil tips ==&lt;br /&gt;
* Uses TS-100 compatible tips&lt;br /&gt;
* Tip model TS-B2 is the default tip supplied with the Pinecil&lt;br /&gt;
* Tip set 1 (left) &amp;amp; 2 (right):&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:PinecilTipSets.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
== Specifications ==&lt;br /&gt;
* '''Dimensions:''' 170mm with solder tip or 98mm without solder tip x 12.8mm x 16.2mm&lt;br /&gt;
* '''Weight:''' 30g with solder tip, 20g without solder tip&lt;br /&gt;
* '''CPU:''' GD32VF103TB 32-bit RV32IMAC RISC-V “Bumblebee Core” @ 108 MHz&lt;br /&gt;
* '''Display:''' 0.67&amp;quot; QUG 9616TSWCG02 96x16 Monochrome Matrix display&lt;br /&gt;
* '''Memory:'''&lt;br /&gt;
** 128KB Flash&lt;br /&gt;
** 32KB SRAM&lt;br /&gt;
* '''DC in (only one of the following at a time):'''&lt;br /&gt;
** 12V- 21V DC5525 Barrel Jack&lt;br /&gt;
** USB-C 12-20V PD&lt;br /&gt;
** QC3.0&lt;br /&gt;
** Recommend operating voltage 12-21V, some components can tolerate higher voltages at &amp;quot;absolute maximum&amp;quot; but it's very ill-advised&lt;br /&gt;
&lt;br /&gt;
== Pinecil board information, schematics and certifications ==&lt;br /&gt;
&lt;br /&gt;
* Pinecil mainboard schematic:&lt;br /&gt;
** [https://files.pine64.org/doc/Pinecil/Pinecil_schematic_v1.0a_20201120.pdf Pinecil mainboard schematic ver 1.0 20201120, this is production version schematic]&lt;br /&gt;
** [https://files.pine64.org/doc/Pinecil/Pinecil-PCB-placement-v1.0-topplace.pdf Pinecil mainboard ver 1.0 PCB Component Placement Top PDF file]&lt;br /&gt;
** [https://files.pine64.org/doc/Pinecil/Pinecil-PCB-placement-v1.0-bottomplace.pdf Pinecil mainboard ver 1.0 PCB Component Placement Bottom PDF file]&lt;br /&gt;
** [https://files.pine64.org/doc/Pinecil/Pinecil-PCB-placement-v1.0-topplace.dxf Pinecil mainboard ver 1.0 PCB Component Placement Top Drawing file]&lt;br /&gt;
** [https://files.pine64.org/doc/Pinecil/Pinecil-PCB-placement-v1.0-bottomplace.dxf Pinecil mainboard ver 1.0 PCB Component Placement Bottom Drawing file]&lt;br /&gt;
&lt;br /&gt;
* Pinecil certifications:&lt;br /&gt;
** [https://files.pine64.org/doc/cert/Pinecil%20CE%20RED%20Certificate-S20102803801001.pdf Pinecil CE RED Certificate]&lt;br /&gt;
** [https://files.pine64.org/doc/cert/Pinecil%20FCC%20Certificate-S20102803802001.pdf Pinecil FCC Certificate]&lt;br /&gt;
** [https://files.pine64.org/doc/cert/Pinecil%20RoHS10%20Certificate-S20102803803001.pdf Pinecil ROHS Certificate]&lt;br /&gt;
&lt;br /&gt;
* Pinecil breakout board schematic:&lt;br /&gt;
** [https://files.pine64.org/doc/Pinecil/Pinecil_Breakout_Board_Schematic_v1.0_20201005.pdf Pinecil breakout board schematic ver 1.0 20201005]&lt;br /&gt;
** [https://files.pine64.org/doc/Pinecil/Pinecil_Breakout_Board_PCB_layout_v1.0_20201005.pdf Pinecil breakout board PCB layout ver 1.0]&lt;br /&gt;
* Photos:&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Pinecil-breakout-board-02.jpg|Store photo&lt;br /&gt;
File:Pinecil breakout top.jpg|Top view&lt;br /&gt;
File:Pinecil breakout bottom.jpg|Bottom view&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Firmware Image Releases ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/pine64/pinecil-firmware-updater/releases/latest Latest Pinecil Firmware Updater] for MacOS and Windows&lt;br /&gt;
&lt;br /&gt;
* [https://files.pine64.org/os/Pinecil/Pinecil_firmware_20201115.zip Pinecil production firmware 20201115, thanks to Ralimtek]&lt;br /&gt;
&lt;br /&gt;
Links to development firmware and documentation:&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/Ralim/IronOS/releases GitHub repository for IronOS, from Ralimtek]&lt;br /&gt;
* [https://github.com/Ralim/IronOS/blob/master/Documentation/Flashing.md GitHub link for IronOS flashing documentation]&lt;br /&gt;
&lt;br /&gt;
== Datasheets for components and peripherals ==&lt;br /&gt;
* GigaDevice RISC-V SoC information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinecil/GD32VF103_Datasheet_Rev%201.1.pdf GigaDevice RISC-V GD32VF103TB SoC Datasheet V1.1]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinecil/GD32VF103_User_Manual_EN_V1.2.pdf GigaDevice RISC-V GD32VF103TB SoC Usermanual V1.2]&lt;br /&gt;
* Display Module information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinecil/1810010328_UG-Univision-Semicon-UG-9616TSWCG02_C88335.pdf QUG 9616TSWCG02 Display Module Datasheet]&lt;br /&gt;
* USB Type-C PD Controller information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinecil/FUSB302-D.PDF ON Semiconductor FUSB302 USB Type-C PD Controller Datasheet]&lt;br /&gt;
* Sensor information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinecil/BMA223-Bosch.pdf Bosch BMA223 Acceleration Sensor Datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinecil/si7210-datasheet.pdf Silicon Lab Si7210 Hall-Effect Magnetic Position Sensor Datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinecil/TMP35_36_37.pdf Analog Device TMP36 Temparature Sensor Datasheet]&lt;br /&gt;
* Power Regulator information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinecil/RT7272B-05.pdf Ricktek RT7272B 3A Switching Power Regulator Datasheet - on mainboard]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinecil/LP6498B6F.pdf LowPowerSemi LP6498B6F 1.2A Switching Power Regulator Datasheet - on breakout board]&lt;br /&gt;
* Power MOSFET Switch information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinecil/Changjiang-Electronics-Tech-CJ-CJQ7328.pdf Chang Jiang CJQ7328 8A MOSFET Datasheet]&lt;br /&gt;
* OP Amp information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinecil/SGM8557.pdf SGMicro SGM8557-1 Low Noise OP Amp Datasheet]&lt;br /&gt;
&lt;br /&gt;
== Batch changes ==&lt;br /&gt;
&lt;br /&gt;
* For the first manufacture batch of the Pinecil, the copper ring connecting the earth screw to the tip was omitted as the engineering team found the TS100 design lacking. For the second round onwards, an improved design copper ring has been included as standard, and is also included with the replacement red and black handles. For normal operation of the iron, omission of the ring does not impact it's operation. If you are working with ESD components, you will however need it in order to ground the iron tip via the earth screw at the back of the iron. If you from the first batch, and need that part, please contact info at pine64 dot org with the subject &amp;quot;Pinecil copper ring&amp;quot;, and include your order number and shipment will be arranged. &lt;br /&gt;
&lt;br /&gt;
* The first batch of Pinecil's were rated 12-24v @ 65W. After some heated discussion on the discussion group, it was decided that it would be downgraded to 12-21V @ 60W, due to concern over the connection of the DC jack to the USB-PD chip, which has a recommended maximum of 21v, and absolute maximum of 28v. &lt;br /&gt;
&lt;br /&gt;
== Development efforts ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! Project Homepage&lt;br /&gt;
! Project Source&lt;br /&gt;
! Implementations&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Ralimtek&lt;br /&gt;
| https://ralimtek.com&lt;br /&gt;
| https://www.gitmemory.com/Ralim&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Alvin Wong&lt;br /&gt;
| &lt;br /&gt;
| https://github.com/alvinhochun/gd32vf103-pinecil-demo-rs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== How to update a firmware ===&lt;br /&gt;
&lt;br /&gt;
{{warning|1=While you can't brick your device permanently (DFU is in ROM); this can make your device inoperable if you flash an invalid firmware.}}&lt;br /&gt;
&lt;br /&gt;
==== With application ====&lt;br /&gt;
&lt;br /&gt;
# Download Pinecil Firmware Updater for [http://pinecil.pine64.org/updater/get-binaries.php?platform=win64 Windows], [http://pinecil.pine64.org/updater/get-binaries.php?platform=macos64 MacOS], or build by yourself from [https://github.com/pine64/pinecil-firmware-updater sources].&lt;br /&gt;
# Open it, select operating system you want to flash and click *Flash*. (Don't connect Pinecil yet)&lt;br /&gt;
# Follow application instructions for correct Pinecil connection to your PC.&lt;br /&gt;
&lt;br /&gt;
==== Manually ====&lt;br /&gt;
&lt;br /&gt;
(Method tested on Linux, should work on any OS which supply dfu-util 0.10, if your distro comes with 0.9 you might soft-brick your Pinecil)&lt;br /&gt;
&lt;br /&gt;
{{note|1=If &amp;lt;code&amp;gt;dfu-util&amp;lt;/code&amp;gt; command cannot find a device with 28e9:0189 ID, try to run it with &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{note|1=To check if you can use dfu-util 0.9, you can use &amp;lt;code&amp;gt;dfu-util -l&amp;lt;/code&amp;gt;. If it reports &amp;lt;code&amp;gt;alt=0, name=&amp;quot;@Internal Flash  /0x08000000/128*001Kg&amp;quot;&amp;lt;/code&amp;gt; you are fine, otherwise you need to upgrade to 0.10, important part is &amp;lt;code&amp;gt;128*001Kg&amp;lt;/code&amp;gt;, which is flash amount of blocks and block size, as a chip used in Pinecil have 128 KB of Flash with 1KB page size}}&lt;br /&gt;
&lt;br /&gt;
# Enter an update mode. For that plug USB cable while holding *-* button (button, that's closest to USB-C port)&lt;br /&gt;
# Make a firmware backup: &amp;lt;code&amp;gt;dfu-util -d 28e9:0189 -a 0 -U ~/pinecil/internal.flash.stock -s 0x08000000&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;28e9:0189&amp;lt;/code&amp;gt; -- USB Device ID (can be obtained from &amp;lt;code&amp;gt;lsusb&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;dfu-util -l&amp;lt;/code&amp;gt; but in dfu-util output it might be hard to identify the Pinecil device)&lt;br /&gt;
## &amp;lt;code&amp;gt;-a 0&amp;lt;/code&amp;gt; -- selects partition to flash. List of possible options can be obtained via &amp;lt;code&amp;gt;dfu-util -l&amp;lt;/code&amp;gt;. Partition 0 - internal SPI flash. Partition 1 - fuses (description of fuses can be found in User Manual for the chip)&lt;br /&gt;
## &amp;lt;code&amp;gt;-U&amp;lt;/code&amp;gt; -- specifies a mode. U is upload, which means that firmware will be downloaded and saved to file (yes, that's confusing, but it is what it is, feel free to verify that in a manual of your version of dfu-util). Command must be followed by a path to file where you want to save your firmware. dfu-util will refuse to dump firmware if you already have a file with that name.&lt;br /&gt;
## &amp;lt;code&amp;gt;-s 0x08000000&amp;lt;/code&amp;gt; -- specify the address in a flash from which dump will start. This can be obtained from &amp;lt;code&amp;gt;dfu-util -l&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Flash a new firmware: &amp;lt;code&amp;gt;dfu-util -d 28e9:0189 -a 0 -D Pinecil_EN.bin -s 0x08000000:mass-erase:force&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; -- is a mode to Download firmware to the device (yes, that's confusing, but you indeed Upload from device and Download to device with dfu-util). That should follow the file with the firmware. Update archive from Ralim usually contains two files: &amp;lt;code&amp;gt;.hex&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;.bin&amp;lt;/code&amp;gt;. One that is required - is &amp;lt;code&amp;gt;.bin&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;_EN&amp;lt;/code&amp;gt; is the language code of the firmware, means that &amp;lt;code&amp;gt;_EN&amp;lt;/code&amp;gt; will flash english version of firmware.&lt;br /&gt;
## &amp;lt;code&amp;gt;-s 0x08000000:mass-erase:force&amp;lt;/code&amp;gt; -- specified the address where to flash the file. &amp;lt;code&amp;gt;:mass-erase:force&amp;lt;/code&amp;gt; is required to force-erase flash before updating firmware, otherwise you might have unpredictable results.&lt;br /&gt;
## If it fails with &amp;lt;code&amp;gt;Error during special command &amp;quot;MASS_ERASE&amp;quot; get_status&amp;lt;/code&amp;gt; (as has happened with recent shipments) then use ...&amp;lt;code&amp;gt;-s 0x08000000&amp;lt;/code&amp;gt; without attempting &amp;quot;mass-erase&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Disassembly steps ==&lt;br /&gt;
&lt;br /&gt;
# Remove tip if present.&lt;br /&gt;
## Let tip cool down.&lt;br /&gt;
## Loosen top (display side) screw (PH1) on the tip side of the device.&lt;br /&gt;
## Gently pull tip out.&lt;br /&gt;
# Slide rubber off towards the tip side.&lt;br /&gt;
# Remove the ground screw (longer screw on the top side towards the port side) (PH1).&lt;br /&gt;
# Remove the bottom screw (at the tip side, between the legs) (PH1).&lt;br /&gt;
# Slightly pull the two halves of the case apart at the tip side, enough to get a fingernail or guitar pick between the halves.&lt;br /&gt;
# Move the pick down the length of the split to loosen the bottom half's clips from the top half of the case.&lt;br /&gt;
# Once loose, remove the bottom half by moving it forward (it is retained by the top half at the port side).&lt;br /&gt;
# Remove the screws retaining the copper tip contacts (PH000).&lt;br /&gt;
# Remove the now loose copper tip contacts.&lt;br /&gt;
# Gently push the board towards the tip side by pushing on one of the ports (for example, by using a misaligned USB C connector).&lt;br /&gt;
# The PCB assembly is now free to be lifted out.&lt;br /&gt;
## The key caps are now no longer retained, carefully set aside the top half, or remove the caps and store them separately.&lt;br /&gt;
&lt;br /&gt;
== Assembly steps ==&lt;br /&gt;
&lt;br /&gt;
# Place the key caps into their recesses in the top half of the case.&lt;br /&gt;
# Place the PCB assembly into the top half of the case ports first.&lt;br /&gt;
## Lower the rest of the board into the case and move the PCB assembly towards the port side of the case (the DC barrel connector may be a firm place to gently push).&lt;br /&gt;
# Install the copper tip contacts.&lt;br /&gt;
## Orient the contact to align the alignment pin with the alignment hole next to the big hole on one of the big gold pads.&lt;br /&gt;
## Install and gently tighten the PH000 screw until the clip is no longer loose.&lt;br /&gt;
# Place the bottom half of the case into the top half by sliding the lip on the port side (side without the feet) of the bottom half under the arch of the port side of the top half.&lt;br /&gt;
# Gently close the case by bringing the two halves together, paying attention to each clip's alignment and ensuring the case edges align.&lt;br /&gt;
# Install the short PH1 screw at the bottom of the tip side of the case.&lt;br /&gt;
# Install the longer PH1 screw at the ground connection point at the top side of the case (between the display and the ports).&lt;br /&gt;
# Slide the rubber sleeve on (larger ridge first).&lt;br /&gt;
# Gently insert tip.&lt;br /&gt;
# Gently tighten the top PH1 screw to retain the tip.&lt;br /&gt;
&lt;br /&gt;
== Power Supply Compatibility ==&lt;br /&gt;
&lt;br /&gt;
The Pinecil can either work with a 12-21V battery or power supply via the 5525 (5.5mm outer diameter, 1.5mm post) centre-positive jack, or with any USB power supply that supports the QC2, QC3 or USB-PD (Power Delivery) specification. QC2 and QC3 power supplies will only be able to provide a maximum of 12V, limiting the Pinecil to about 17W of thermal capability. A suitable USB-PD power supply / power bank will be able to provide 20V, allowing the Pinecil to deliver the full 60W of heat to soldering tip. &lt;br /&gt;
&lt;br /&gt;
Known working QC/PD/barrel power adapters / power banks include:&lt;br /&gt;
&lt;br /&gt;
Power adapter:&lt;br /&gt;
* [https://pine64.com/product/pinepower-120w-desktop-power-supply-us-version/ PinePower Desktop]&lt;br /&gt;
* [https://www.nekteck.com/product/usb-if-certified-usb-c-charger-nekteck-60w-type-c-wall-charger-power-delivery-pd3-0-travel-charger-compatible-with-macbook-pro-2018-macbook-air-ipad-pro-pixel-3-galaxy-note-9-s9-with-6ft-cable/ Nekteck 60W with 6ft cable]&lt;br /&gt;
* Notebook AC Adapter HP L30757-002 (PD@20V)&lt;br /&gt;
* Notebook AC Adapter Lenovo ADLX65YLC3D (PD@20V)&lt;br /&gt;
* Notebook AC Adapter Lenovo LN-A0403A3C (Barrel 20V/2A)&lt;br /&gt;
* Notebook AC Adapter Delta Electronics ADP-65JH BB (DC@19V) and ADP-90CD DB&lt;br /&gt;
* Notebook AC Adapter LITEON PA-1700-02 (DC@18.5V, 65W)&lt;br /&gt;
* Smartphone Charger Samsung EP-TA20EWE (QC2@9V)&lt;br /&gt;
* Smartphone Charger Google Pixel G1000-US (PD@9V)&lt;br /&gt;
* Nintendo Switch AC Adapter (USB-C wall-wart) (PD@15V)&lt;br /&gt;
* Notebook Docking Station HP Thunderbolt Dock 230W G2 (PD@20V)&lt;br /&gt;
** (had problems with lower firmware versions, but works fine Pinecil firmware: 2.15 and DockingStation firmware: 1.0.69.1) &lt;br /&gt;
&lt;br /&gt;
Power bank:&lt;br /&gt;
* [http://beta.blitzwolf.com/-p-15.html Blitzwolf BW-P1 10400mAh QC2]&lt;br /&gt;
* [https://www.bestbuy.com/site/insignia-80w-26800-mah-portable-charger-for-most-usb-c-laptops-black/6419522.p?skuId=6419522 Insignia 80W 26,800mAh NS-PWLB80]&lt;br /&gt;
&lt;br /&gt;
Limited usability:&lt;br /&gt;
* Nillkin 63W USB Car Charger Quick Charge 3.0 PD (Pinecil Firmware: 2.14.2425902)&lt;br /&gt;
** QC3@9V/12V and PD@15V work, PD@20V doesn't&lt;br /&gt;
** PD@20V works fine when using PDC004-20V or ZY12PDN on dc jack (DC@20V, limit: 45W)&lt;br /&gt;
&lt;br /&gt;
Blacklist / Not compatible:&lt;br /&gt;
* Smartphone Charger RAVpower 30W Dual USB Turbo Wall Charger (Should provide QC3@9V/12V, but only provides 5 V on both ports)&lt;br /&gt;
* Sabrent HB-B7C3 USB3 hub, 7 data ports, 3 charge ports, 60W supply -- does not negotiate higher voltages.&lt;br /&gt;
&lt;br /&gt;
== Cases and 3D Models ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/kohkohwastaken/3D-Models/tree/main/Pine64 3D model of Pinecil by kohkoh]&lt;br /&gt;
* [https://www.thingiverse.com/thing:4727212 Pinecil compact case]&lt;br /&gt;
* [https://www.thingiverse.com/thing:4723235 Pinecil and tips case]&lt;br /&gt;
* [https://www.thingiverse.com/thing:4734830 T12 Tip Adapter]&lt;br /&gt;
* [https://www.thingiverse.com/search?q=pinecil Thingiverse search for 'Pinecil']&lt;br /&gt;
&lt;br /&gt;
== Caring for a soldering iron ==&lt;br /&gt;
&lt;br /&gt;
https://www.weller-tools.com/how-to-care-for-soldering-iron-tips/&lt;br /&gt;
&lt;br /&gt;
https://www.eevblog.com/forum/beginners/best-way-to-clean-oxidized-soldering-iron-tip/&lt;br /&gt;
&lt;br /&gt;
== Community links ==&lt;br /&gt;
&lt;br /&gt;
* [https://t.me/joinchat/Kmi2S1iej-_4DgrVf3jjnQ Telegram]&lt;br /&gt;
* [https://matrix.to/#/#pinecil:matrix.org Matrix]&lt;br /&gt;
* [https://discordapp.com/invite/DgB7kzr Discord]&lt;br /&gt;
&lt;br /&gt;
[[Category:Pinecil]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Pinecil&amp;diff=10854</id>
		<title>Pinecil</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Pinecil&amp;diff=10854"/>
		<updated>2021-07-01T10:46:14Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overall description ==&lt;br /&gt;
[[File:Pinecil-bb2-01_rotate.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
The Pinecil is a portable, temperature controlled soldering iron. It also has the intended use of being a Risc-V development device using a breakout board. It's main features are:&lt;br /&gt;
&lt;br /&gt;
* Portability&lt;br /&gt;
* Settable temperature&lt;br /&gt;
* Soldering tips:&lt;br /&gt;
** Replaceable&lt;br /&gt;
** More than half a dozen available. Currently sold as 2 separate sets of 4, one fine set, the other larger.&lt;br /&gt;
** Compatible with TS100&lt;br /&gt;
* Flexible power sources:&lt;br /&gt;
** Barrel jack&lt;br /&gt;
** USB Type C power delivery&lt;br /&gt;
&lt;br /&gt;
There are additional features that include (Useful for devkit use):&lt;br /&gt;
&lt;br /&gt;
* A Programmable Gigadevice Risc-V GD32V embedded processor&lt;br /&gt;
* 0.67&amp;quot; Monochrome Display that can render text or graphics&lt;br /&gt;
* Support for Idle detection, for automatic power down of tip&lt;br /&gt;
&lt;br /&gt;
== Use ==&lt;br /&gt;
&lt;br /&gt;
Pinecil comes with a separate heating element / tip. After inserting its barrel into the end of the handle, lightly tighten the screw onto it. Loosen this screw when changing out the tip.&lt;br /&gt;
&lt;br /&gt;
The USB port, connected to any host, provides enough power to drive the user interface, but not necessarily enough to heat the tip. 5 volts from a USB 2 port will only display the user interface.&lt;br /&gt;
&lt;br /&gt;
To check the firmware version, hold down the &amp;quot;-&amp;quot; button. It will display something like &amp;quot;v2.14.2425902 17-01-21&amp;quot;, suggesting its actual release date, here 2021-01-17. Clicking the &amp;quot;+&amp;quot; button repeatedly reveals various internal settings, such as hardware version, current temperature, time since power-on, and number of motions detected. Clicking &amp;quot;-&amp;quot; returns to the regular display of current temperature, target temperature, and supply voltage. At other times it may show power draw.&lt;br /&gt;
&lt;br /&gt;
To actually heat up the tip, you will need a power supply that can provide 12V or more. This may be a dedicated power supply with a standard barrel connector (+ center, - outside) that supplies anywhere from 12V to 21V, or a USB-C supply that can negotiate up to such a voltage. (You probably have a suitable supply disused in a box somewhere.)&lt;br /&gt;
&lt;br /&gt;
Clicking &amp;quot;+&amp;quot; starts the tip heating. The display then shows power draw, current temperature, supply voltage, and estimated time to reach target temperature. You can adjust the target temperature with further clicks of &amp;quot;+&amp;quot; and &amp;quot;-&amp;quot; buttons. Waiting for the regular display to return, then holding down &amp;quot;-&amp;quot; for a moment turns the heat off. You can watch the temperature measurement go up and down. Certain settings involve holding down both buttons.&lt;br /&gt;
&lt;br /&gt;
The iron will &amp;quot;sleep&amp;quot;, switching to a lower temperature, after it has been put down for a short time, and heat up again when it is picked up.&lt;br /&gt;
&lt;br /&gt;
Clicking &amp;quot;-&amp;quot; when heat is off steps through menus to control a variety of settings, such as the sleep temperature, time until sleep, motion sensitivity, temperature units (C or F) etc.&lt;br /&gt;
&lt;br /&gt;
'''Menu Items''' items (accurate for firmware 2.1.14)&lt;br /&gt;
&lt;br /&gt;
* Power Source &lt;br /&gt;
**(cutoff choices for voltage and battery operation)&lt;br /&gt;
* QC voltage   &lt;br /&gt;
**(voltage to negotiate for with QC chargers (9, 12, 20 volts)&lt;br /&gt;
* Soldering Settings&lt;br /&gt;
** Boost Temperature&lt;br /&gt;
** Auto Start&lt;br /&gt;
** Temperature Change (short click)&lt;br /&gt;
** Temperature Change (long click)&lt;br /&gt;
** Allow Lock (when soldering)&lt;br /&gt;
* Sleep Settings&lt;br /&gt;
** Sleep Temperature&lt;br /&gt;
** Sleep Timeout&lt;br /&gt;
** Shutdown Time&lt;br /&gt;
** Motion Sensor Sensitivity&lt;br /&gt;
** Hall Sensor Sensitivity&lt;br /&gt;
* User Interface&lt;br /&gt;
** Temperature Units (C/F)&lt;br /&gt;
** Display orientation (right/left)&lt;br /&gt;
** Cooldown Blink&lt;br /&gt;
** Scroll Speed (slow/fast)&lt;br /&gt;
** Reverse +/- buttons&lt;br /&gt;
* Advanced Options&lt;br /&gt;
** Power Limit (watts)&lt;br /&gt;
** Detailed Idle Screen&lt;br /&gt;
** Detailed Solder Screen&lt;br /&gt;
** Factory Reset?&lt;br /&gt;
** Calibrate Temperature&lt;br /&gt;
** Calibrate Voltage&lt;br /&gt;
** Power Pulse (watts)&lt;br /&gt;
&lt;br /&gt;
== Pictures ==&lt;br /&gt;
&lt;br /&gt;
Pre-release:&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Pinecil_Exploded_Diagram_ver_0.9.png|Pinecil renders|alt=alt language&lt;br /&gt;
File:PinecilPrototype.jpg|Pinecil prototype|alt=alt language&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Production:&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Pinecil-bb2-01.jpg|Pinecil and TS-B2 retail package|alt=alt language&lt;br /&gt;
File:Pinecil-Case-Red-1.jpg|Pinecil red casing|alt=alt language&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pinecil tips ==&lt;br /&gt;
* Uses TS-100 compatible tips&lt;br /&gt;
* Tip model TS-B2 is the default tip supplied with the Pinecil&lt;br /&gt;
* Tip set 1 (left) &amp;amp; 2 (right):&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:PinecilTipSets.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
== Specifications ==&lt;br /&gt;
* '''Dimensions:''' 170mm with solder tip or 98mm without solder tip x 12.8mm x 16.2mm&lt;br /&gt;
* '''Weight:''' 30g with solder tip, 20g without solder tip&lt;br /&gt;
* '''CPU:''' GD32VF103TB 32-bit RV32IMAC RISC-V “Bumblebee Core” @ 108 MHz&lt;br /&gt;
* '''Display:''' 0.67&amp;quot; QUG 9616TSWCG02 96x16 Monochrome Matrix display&lt;br /&gt;
* '''Memory:'''&lt;br /&gt;
** 128KB Flash&lt;br /&gt;
** 32KB SRAM&lt;br /&gt;
* '''DC in (only one of the following at a time):'''&lt;br /&gt;
** 12V- 21V DC5525 Barrel Jack&lt;br /&gt;
** USB-C 12-20V PD&lt;br /&gt;
** QC3.0&lt;br /&gt;
** Recommend operating voltage 12-21V, maximum rating at 21V&lt;br /&gt;
&lt;br /&gt;
== Pinecil board information, schematics and certifications ==&lt;br /&gt;
&lt;br /&gt;
* Pinecil mainboard schematic:&lt;br /&gt;
** [https://files.pine64.org/doc/Pinecil/Pinecil_schematic_v1.0a_20201120.pdf Pinecil mainboard schematic ver 1.0 20201120, this is production version schematic]&lt;br /&gt;
** [https://files.pine64.org/doc/Pinecil/Pinecil-PCB-placement-v1.0-topplace.pdf Pinecil mainboard ver 1.0 PCB Component Placement Top PDF file]&lt;br /&gt;
** [https://files.pine64.org/doc/Pinecil/Pinecil-PCB-placement-v1.0-bottomplace.pdf Pinecil mainboard ver 1.0 PCB Component Placement Bottom PDF file]&lt;br /&gt;
** [https://files.pine64.org/doc/Pinecil/Pinecil-PCB-placement-v1.0-topplace.dxf Pinecil mainboard ver 1.0 PCB Component Placement Top Drawing file]&lt;br /&gt;
** [https://files.pine64.org/doc/Pinecil/Pinecil-PCB-placement-v1.0-bottomplace.dxf Pinecil mainboard ver 1.0 PCB Component Placement Bottom Drawing file]&lt;br /&gt;
&lt;br /&gt;
* Pinecil certifications:&lt;br /&gt;
** [https://files.pine64.org/doc/cert/Pinecil%20CE%20RED%20Certificate-S20102803801001.pdf Pinecil CE RED Certificate]&lt;br /&gt;
** [https://files.pine64.org/doc/cert/Pinecil%20FCC%20Certificate-S20102803802001.pdf Pinecil FCC Certificate]&lt;br /&gt;
** [https://files.pine64.org/doc/cert/Pinecil%20RoHS10%20Certificate-S20102803803001.pdf Pinecil ROHS Certificate]&lt;br /&gt;
&lt;br /&gt;
* Pinecil breakout board schematic:&lt;br /&gt;
** [https://files.pine64.org/doc/Pinecil/Pinecil_Breakout_Board_Schematic_v1.0_20201005.pdf Pinecil breakout board schematic ver 1.0 20201005]&lt;br /&gt;
** [https://files.pine64.org/doc/Pinecil/Pinecil_Breakout_Board_PCB_layout_v1.0_20201005.pdf Pinecil breakout board PCB layout ver 1.0]&lt;br /&gt;
* Photos:&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Pinecil-breakout-board-02.jpg|Store photo&lt;br /&gt;
File:Pinecil breakout top.jpg|Top view&lt;br /&gt;
File:Pinecil breakout bottom.jpg|Bottom view&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Firmware Image Releases ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/pine64/pinecil-firmware-updater/releases/latest Latest Pinecil Firmware Updater] for MacOS and Windows&lt;br /&gt;
&lt;br /&gt;
* [https://files.pine64.org/os/Pinecil/Pinecil_firmware_20201115.zip Pinecil production firmware 20201115, thanks to Ralimtek]&lt;br /&gt;
&lt;br /&gt;
Links to development firmware and documentation:&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/Ralim/IronOS/releases GitHub repository for IronOS, from Ralimtek]&lt;br /&gt;
* [https://github.com/Ralim/IronOS/blob/master/Documentation/Flashing.md GitHub link for IronOS flashing documentation]&lt;br /&gt;
&lt;br /&gt;
== Datasheets for components and peripherals ==&lt;br /&gt;
* GigaDevice RISC-V SoC information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinecil/GD32VF103_Datasheet_Rev%201.1.pdf GigaDevice RISC-V GD32VF103TB SoC Datasheet V1.1]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinecil/GD32VF103_User_Manual_EN_V1.2.pdf GigaDevice RISC-V GD32VF103TB SoC Usermanual V1.2]&lt;br /&gt;
* Display Module information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinecil/1810010328_UG-Univision-Semicon-UG-9616TSWCG02_C88335.pdf QUG 9616TSWCG02 Display Module Datasheet]&lt;br /&gt;
* USB Type-C PD Controller information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinecil/FUSB302-D.PDF ON Semiconductor FUSB302 USB Type-C PD Controller Datasheet]&lt;br /&gt;
* Sensor information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinecil/BMA223-Bosch.pdf Bosch BMA223 Acceleration Sensor Datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinecil/si7210-datasheet.pdf Silicon Lab Si7210 Hall-Effect Magnetic Position Sensor Datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinecil/TMP35_36_37.pdf Analog Device TMP36 Temparature Sensor Datasheet]&lt;br /&gt;
* Power Regulator information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinecil/RT7272B-05.pdf Ricktek RT7272B 3A Switching Power Regulator Datasheet - on mainboard]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinecil/LP6498B6F.pdf LowPowerSemi LP6498B6F 1.2A Switching Power Regulator Datasheet - on breakout board]&lt;br /&gt;
* Power MOSFET Switch information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinecil/Changjiang-Electronics-Tech-CJ-CJQ7328.pdf Chang Jiang CJQ7328 8A MOSFET Datasheet]&lt;br /&gt;
* OP Amp information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinecil/SGM8557.pdf SGMicro SGM8557-1 Low Noise OP Amp Datasheet]&lt;br /&gt;
&lt;br /&gt;
== Batch changes ==&lt;br /&gt;
&lt;br /&gt;
* For the first manufacture batch of the Pinecil, the copper ring connecting the earth screw to the tip was omitted as the engineering team found the TS100 design lacking. For the second round onwards, an improved design copper ring has been included as standard, and is also included with the replacement red and black handles. For normal operation of the iron, omission of the ring does not impact it's operation. If you are working with ESD components, you will however need it in order to ground the iron tip via the earth screw at the back of the iron. If you from the first batch, and need that part, please contact info at pine64 dot org with the subject &amp;quot;Pinecil copper ring&amp;quot;, and include your order number and shipment will be arranged. &lt;br /&gt;
&lt;br /&gt;
* The first batch of Pinecil's were rated 12-24v @ 65W. After some heated discussion on the discussion group, it was decided that it would be downgraded to 12-21V @ 60W, due to concern over the connection of the DC jack to the USB-PD chip, which has a recommended maximum of 21v, and absolute maximum of 28v. &lt;br /&gt;
&lt;br /&gt;
== Development efforts ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! Project Homepage&lt;br /&gt;
! Project Source&lt;br /&gt;
! Implementations&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Ralimtek&lt;br /&gt;
| https://ralimtek.com&lt;br /&gt;
| https://www.gitmemory.com/Ralim&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Alvin Wong&lt;br /&gt;
| &lt;br /&gt;
| https://github.com/alvinhochun/gd32vf103-pinecil-demo-rs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== How to update a firmware ===&lt;br /&gt;
&lt;br /&gt;
{{warning|1=While you can't brick your device permanently (DFU is in ROM); this can make your device inoperable if you flash an invalid firmware.}}&lt;br /&gt;
&lt;br /&gt;
==== With application ====&lt;br /&gt;
&lt;br /&gt;
# Download Pinecil Firmware Updater for [http://pinecil.pine64.org/updater/get-binaries.php?platform=win64 Windows], [http://pinecil.pine64.org/updater/get-binaries.php?platform=macos64 MacOS], or build by yourself from [https://github.com/pine64/pinecil-firmware-updater sources].&lt;br /&gt;
# Open it, select operating system you want to flash and click *Flash*. (Don't connect Pinecil yet)&lt;br /&gt;
# Follow application instructions for correct Pinecil connection to your PC.&lt;br /&gt;
&lt;br /&gt;
==== Manually ====&lt;br /&gt;
&lt;br /&gt;
(Method tested on Linux, should work on any OS which supply dfu-util 0.10, if your distro comes with 0.9 you might soft-brick your Pinecil)&lt;br /&gt;
&lt;br /&gt;
{{note|1=If &amp;lt;code&amp;gt;dfu-util&amp;lt;/code&amp;gt; command cannot find a device with 28e9:0189 ID, try to run it with &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{note|1=To check if you can use dfu-util 0.9, you can use &amp;lt;code&amp;gt;dfu-util -l&amp;lt;/code&amp;gt;. If it reports &amp;lt;code&amp;gt;alt=0, name=&amp;quot;@Internal Flash  /0x08000000/128*001Kg&amp;quot;&amp;lt;/code&amp;gt; you are fine, otherwise you need to upgrade to 0.10, important part is &amp;lt;code&amp;gt;128*001Kg&amp;lt;/code&amp;gt;, which is flash amount of blocks and block size, as a chip used in Pinecil have 128 KB of Flash with 1KB page size}}&lt;br /&gt;
&lt;br /&gt;
# Enter an update mode. For that plug USB cable while holding *-* button (button, that's closest to USB-C port)&lt;br /&gt;
# Make a firmware backup: &amp;lt;code&amp;gt;dfu-util -d 28e9:0189 -a 0 -U ~/pinecil/internal.flash.stock -s 0x08000000&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;28e9:0189&amp;lt;/code&amp;gt; -- USB Device ID (can be obtained from &amp;lt;code&amp;gt;lsusb&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;dfu-util -l&amp;lt;/code&amp;gt; but in dfu-util output it might be hard to identify the Pinecil device)&lt;br /&gt;
## &amp;lt;code&amp;gt;-a 0&amp;lt;/code&amp;gt; -- selects partition to flash. List of possible options can be obtained via &amp;lt;code&amp;gt;dfu-util -l&amp;lt;/code&amp;gt;. Partition 0 - internal SPI flash. Partition 1 - fuses (description of fuses can be found in User Manual for the chip)&lt;br /&gt;
## &amp;lt;code&amp;gt;-U&amp;lt;/code&amp;gt; -- specifies a mode. U is upload, which means that firmware will be downloaded and saved to file (yes, that's confusing, but it is what it is, feel free to verify that in a manual of your version of dfu-util). Command must be followed by a path to file where you want to save your firmware. dfu-util will refuse to dump firmware if you already have a file with that name.&lt;br /&gt;
## &amp;lt;code&amp;gt;-s 0x08000000&amp;lt;/code&amp;gt; -- specify the address in a flash from which dump will start. This can be obtained from &amp;lt;code&amp;gt;dfu-util -l&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Flash a new firmware: &amp;lt;code&amp;gt;dfu-util -d 28e9:0189 -a 0 -D Pinecil_EN.bin -s 0x08000000:mass-erase:force&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; -- is a mode to Download firmware to the device (yes, that's confusing, but you indeed Upload from device and Download to device with dfu-util). That should follow the file with the firmware. Update archive from Ralim usually contains two files: &amp;lt;code&amp;gt;.hex&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;.bin&amp;lt;/code&amp;gt;. One that is required - is &amp;lt;code&amp;gt;.bin&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;_EN&amp;lt;/code&amp;gt; is the language code of the firmware, means that &amp;lt;code&amp;gt;_EN&amp;lt;/code&amp;gt; will flash english version of firmware.&lt;br /&gt;
## &amp;lt;code&amp;gt;-s 0x08000000:mass-erase:force&amp;lt;/code&amp;gt; -- specified the address where to flash the file. &amp;lt;code&amp;gt;:mass-erase:force&amp;lt;/code&amp;gt; is required to force-erase flash before updating firmware, otherwise you might have unpredictable results.&lt;br /&gt;
## If it fails with &amp;lt;code&amp;gt;Error during special command &amp;quot;MASS_ERASE&amp;quot; get_status&amp;lt;/code&amp;gt; (as has happened with recent shipments) then use ...&amp;lt;code&amp;gt;-s 0x08000000&amp;lt;/code&amp;gt; without attempting &amp;quot;mass-erase&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Disassembly steps ==&lt;br /&gt;
&lt;br /&gt;
# Remove tip if present.&lt;br /&gt;
## Let tip cool down.&lt;br /&gt;
## Loosen top (display side) screw (PH1) on the tip side of the device.&lt;br /&gt;
## Gently pull tip out.&lt;br /&gt;
# Slide rubber off towards the tip side.&lt;br /&gt;
# Remove the ground screw (longer screw on the top side towards the port side) (PH1).&lt;br /&gt;
# Remove the bottom screw (at the tip side, between the legs) (PH1).&lt;br /&gt;
# Slightly pull the two halves of the case apart at the tip side, enough to get a fingernail or guitar pick between the halves.&lt;br /&gt;
# Move the pick down the length of the split to loosen the bottom half's clips from the top half of the case.&lt;br /&gt;
# Once loose, remove the bottom half by moving it forward (it is retained by the top half at the port side).&lt;br /&gt;
# Remove the screws retaining the copper tip contacts (PH000).&lt;br /&gt;
# Remove the now loose copper tip contacts.&lt;br /&gt;
# Gently push the board towards the tip side by pushing on one of the ports (for example, by using a misaligned USB C connector).&lt;br /&gt;
# The PCB assembly is now free to be lifted out.&lt;br /&gt;
## The key caps are now no longer retained, carefully set aside the top half, or remove the caps and store them separately.&lt;br /&gt;
&lt;br /&gt;
== Assembly steps ==&lt;br /&gt;
&lt;br /&gt;
# Place the key caps into their recesses in the top half of the case.&lt;br /&gt;
# Place the PCB assembly into the top half of the case ports first.&lt;br /&gt;
## Lower the rest of the board into the case and move the PCB assembly towards the port side of the case (the DC barrel connector may be a firm place to gently push).&lt;br /&gt;
# Install the copper tip contacts.&lt;br /&gt;
## Orient the contact to align the alignment pin with the alignment hole next to the big hole on one of the big gold pads.&lt;br /&gt;
## Install and gently tighten the PH000 screw until the clip is no longer loose.&lt;br /&gt;
# Place the bottom half of the case into the top half by sliding the lip on the port side (side without the feet) of the bottom half under the arch of the port side of the top half.&lt;br /&gt;
# Gently close the case by bringing the two halves together, paying attention to each clip's alignment and ensuring the case edges align.&lt;br /&gt;
# Install the short PH1 screw at the bottom of the tip side of the case.&lt;br /&gt;
# Install the longer PH1 screw at the ground connection point at the top side of the case (between the display and the ports).&lt;br /&gt;
# Slide the rubber sleeve on (larger ridge first).&lt;br /&gt;
# Gently insert tip.&lt;br /&gt;
# Gently tighten the top PH1 screw to retain the tip.&lt;br /&gt;
&lt;br /&gt;
== Power Supply Compatibility ==&lt;br /&gt;
&lt;br /&gt;
The Pinecil can either work with a 12-21V battery or power supply via the 5525 (5.5mm outer diameter, 1.5mm post) centre-positive jack, or with any USB power supply that supports the QC2, QC3 or USB-PD (Power Delivery) specification. QC2 and QC3 power supplies will only be able to provide a maximum of 12V, limiting the Pinecil to about 17W of thermal capability. A suitable USB-PD power supply / power bank will be able to provide 20V, allowing the Pinecil to deliver the full 60W of heat to soldering tip. &lt;br /&gt;
&lt;br /&gt;
Known working QC/PD/barrel power adapters / power banks include:&lt;br /&gt;
&lt;br /&gt;
Power adapter:&lt;br /&gt;
* [https://pine64.com/product/pinepower-120w-desktop-power-supply-us-version/ PinePower Desktop]&lt;br /&gt;
* [https://www.nekteck.com/product/usb-if-certified-usb-c-charger-nekteck-60w-type-c-wall-charger-power-delivery-pd3-0-travel-charger-compatible-with-macbook-pro-2018-macbook-air-ipad-pro-pixel-3-galaxy-note-9-s9-with-6ft-cable/ Nekteck 60W with 6ft cable]&lt;br /&gt;
* Notebook AC Adapter HP L30757-002 (PD@20V)&lt;br /&gt;
* Notebook AC Adapter Lenovo ADLX65YLC3D (PD@20V)&lt;br /&gt;
* Notebook AC Adapter Lenovo LN-A0403A3C (Barrel 20V/2A)&lt;br /&gt;
* Notebook AC Adapter Delta Electronics ADP-65JH BB (DC@19V) and ADP-90CD DB&lt;br /&gt;
* Notebook AC Adapter LITEON PA-1700-02 (DC@18.5V, 65W)&lt;br /&gt;
* Smartphone Charger Samsung EP-TA20EWE (QC2@9V)&lt;br /&gt;
* Smartphone Charger Google Pixel G1000-US (PD@9V)&lt;br /&gt;
* Nintendo Switch AC Adapter (USB-C wall-wart) (PD@15V)&lt;br /&gt;
* Notebook Docking Station HP Thunderbolt Dock 230W G2 (PD@20V)&lt;br /&gt;
** (had problems with lower firmware versions, but works fine Pinecil firmware: 2.15 and DockingStation firmware: 1.0.69.1) &lt;br /&gt;
&lt;br /&gt;
Power bank:&lt;br /&gt;
* [http://beta.blitzwolf.com/-p-15.html Blitzwolf BW-P1 10400mAh QC2]&lt;br /&gt;
* [https://www.bestbuy.com/site/insignia-80w-26800-mah-portable-charger-for-most-usb-c-laptops-black/6419522.p?skuId=6419522 Insignia 80W 26,800mAh NS-PWLB80]&lt;br /&gt;
&lt;br /&gt;
Limited usability:&lt;br /&gt;
* Nillkin 63W USB Car Charger Quick Charge 3.0 PD (Pinecil Firmware: 2.14.2425902)&lt;br /&gt;
** QC3@9V/12V and PD@15V work, PD@20V doesn't&lt;br /&gt;
** PD@20V works fine when using PDC004-20V or ZY12PDN on dc jack (DC@20V, limit: 45W)&lt;br /&gt;
&lt;br /&gt;
Blacklist / Not compatible:&lt;br /&gt;
* Smartphone Charger RAVpower 30W Dual USB Turbo Wall Charger (Should provide QC3@9V/12V, but only provides 5 V on both ports)&lt;br /&gt;
* Sabrent HB-B7C3 USB3 hub, 7 data ports, 3 charge ports, 60W supply -- does not negotiate higher voltages.&lt;br /&gt;
&lt;br /&gt;
== Cases and 3D Models ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/kohkohwastaken/3D-Models/tree/main/Pine64 3D model of Pinecil by kohkoh]&lt;br /&gt;
* [https://www.thingiverse.com/thing:4727212 Pinecil compact case]&lt;br /&gt;
* [https://www.thingiverse.com/thing:4723235 Pinecil and tips case]&lt;br /&gt;
* [https://www.thingiverse.com/thing:4734830 T12 Tip Adapter]&lt;br /&gt;
* [https://www.thingiverse.com/search?q=pinecil Thingiverse search for 'Pinecil']&lt;br /&gt;
&lt;br /&gt;
== Caring for a soldering iron ==&lt;br /&gt;
&lt;br /&gt;
https://www.weller-tools.com/how-to-care-for-soldering-iron-tips/&lt;br /&gt;
&lt;br /&gt;
https://www.eevblog.com/forum/beginners/best-way-to-clean-oxidized-soldering-iron-tip/&lt;br /&gt;
&lt;br /&gt;
== Community links ==&lt;br /&gt;
&lt;br /&gt;
* [https://t.me/joinchat/Kmi2S1iej-_4DgrVf3jjnQ Telegram]&lt;br /&gt;
* [https://matrix.to/#/#pinecil:matrix.org Matrix]&lt;br /&gt;
* [https://discordapp.com/invite/DgB7kzr Discord]&lt;br /&gt;
&lt;br /&gt;
[[Category:Pinecil]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Upgrade_PineTime_to_InfiniTime_1.0.0&amp;diff=10822</id>
		<title>Upgrade PineTime to InfiniTime 1.0.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Upgrade_PineTime_to_InfiniTime_1.0.0&amp;diff=10822"/>
		<updated>2021-06-21T20:58:06Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note|Page under construction, information subject to review and feedback.}}&lt;br /&gt;
&lt;br /&gt;
Congratulations on receiving your new PineTime!&lt;br /&gt;
&lt;br /&gt;
From the factory, it ships with InfiniTime 0.7.1, and an older bootloader. So now you're probably wondering exactly how on earth do you go about upgrading your watch to the latest and greatest version of InfiniTime - you know, that version you've seen all those great pictures, videos and reviews of. To those of us that are developing stuff for it, it's pretty easy and straightforward, but like with all technology, it is a bit tricky. &lt;br /&gt;
&lt;br /&gt;
{{warning|1=Some people ran into issues during the update process that would temporarily make their watch unusable (display frozen or blank). The only know workaround consists of waiting for the battery to drain completely and try again. With the display off, and battery fully charged, you can expect a wait of 5-7 days so it is best to not fully charge it. If it freezes with the display on, it will likely be flat by the end of the day. We've never heard of any PineTimes that were permanently bricked (were not recoverable), though. }} &lt;br /&gt;
&lt;br /&gt;
In a nutshell, you need to:&lt;br /&gt;
# Charge your watch, but '''not''' to 100% - keep it at approximately 50% - for the reason described above.&lt;br /&gt;
# Update InfiniTime&lt;br /&gt;
# Update the bootloader&lt;br /&gt;
# Install the recovery firmware&lt;br /&gt;
&lt;br /&gt;
= Update Process =&lt;br /&gt;
So how do you do this? Where do you start? Well, with a sealed PineTime, your only easy option is via Over The Air (OTA) Device Firmware Update (DFU), which is done via Bluetooth. There are a couple of different ways and apps you can use to do this. If you have an Android device, you can use [https://f-droid.org/en/packages/nodomain.freeyourgadget.gadgetbridge/ Gadgetbridge] or [https://play.google.com/store/apps/details?id=no.nordicsemi.android.mcp NRFConnect]. Otherwise, if your laptop or desktop computer has Bluetooth and runs Linux, you can use [https://github.com/alexr4535/siglo Siglo] or [https://github.com/piggz/harbour-amazfish Amazfish]. You can also use these applications on your Pinebook Pro or Pinephone if you happen to have those devices. &lt;br /&gt;
&lt;br /&gt;
The reason for installing the updates in the specified order is because newer versions of InfiniTime have a more robust Bluetooth update process, and since we're updating everything over Bluetooth, the fewer retries and failures from that you have the better. It will still sometimes disconnect mid update, meaning you'll need to try again, and possibly restart the watch a few times as well. And since the recovery firmware is new to the 1.0.0 version of the bootloader, it's best to update that last. &lt;br /&gt;
&lt;br /&gt;
[https://video.codingfield.com/videos/watch/831077c5-16f3-47b4-9b2b-c4bbfecc6529 This video] shows the bootloader and recovery firmware installation procedure.&lt;br /&gt;
&lt;br /&gt;
[https://video.codingfield.com/videos/watch/f7bffb3d-a6a1-43c4-8f01-f4aeff4adf9e This video] shows the bootloader installation and firmware update using Amazfish.&lt;br /&gt;
&lt;br /&gt;
You can also read a [https://github.com/JF002/pinetime-mcuboot-bootloader/blob/339224cf5ed21f4e8b2d22eaeab9869120f7f752/docs/howToUpdate.md detailed installation procedure in the documentation of the bootloader].&lt;br /&gt;
&lt;br /&gt;
== Update InfiniTime ==&lt;br /&gt;
To update the main InfiniTime app, you want to flash [https://github.com/JF002/InfiniTime/releases/download/1.0.0/pinetime-mcuboot-app-dfu-1.0.0.zip pinetime-mcuboot-app-dfu-1.0.0.zip].&lt;br /&gt;
&lt;br /&gt;
After updating InfiniTime, ensure that you validate the firmware to prevent it from being automatically reverted/rolled back if your watch is reset/restarted. To do this, swipe right to access the quick actions panel, press the gear/settings icon, swipe up once to show the second page, press on the 'Firmware' option and then on 'Validate'.&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/-5lwBd60k0Q Video showing validation process]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Gadgetbridge ===&lt;br /&gt;
&lt;br /&gt;
# Connect your PineTime to GB&lt;br /&gt;
# Download the aforementioned file to your phone&lt;br /&gt;
# Find the file in your file manager&lt;br /&gt;
# 'Open With' Gadgetbridge F/W Installer (method varies by device) - on my phone, it is press and hold, select the file, and then choose 'open with app' from the more options menu&lt;br /&gt;
# Confirm that you wish to apply the update&lt;br /&gt;
# Wait for the update to complete&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/nAaaC7D5sVo Video showing how to start the update]&lt;br /&gt;
&lt;br /&gt;
=== NRFConnect ===&lt;br /&gt;
&lt;br /&gt;
# Download the aforementioned file to your phone.&lt;br /&gt;
# Open NRFConnect&lt;br /&gt;
# Scan for your device&lt;br /&gt;
# Connect to it&lt;br /&gt;
# Choose the DFU option at the top right of the screen&lt;br /&gt;
# Ensure the 'Distribution packet (ZIP)' option is selected, and press OK&lt;br /&gt;
# Select your previously downloaded file&lt;br /&gt;
# Wait for the update to complete&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/jnX7WwYDiDE Video showing how to start the update]&lt;br /&gt;
&lt;br /&gt;
=== Siglo ===&lt;br /&gt;
# If your device was not detected upon start, press &amp;quot;Rescan&amp;quot; to find it.&lt;br /&gt;
# Select the &amp;quot;1.0.0&amp;quot; tag&lt;br /&gt;
# Select the aforementioned file/asset.&lt;br /&gt;
# Select &amp;quot;Flash It!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Amazfish ===&lt;br /&gt;
# Run Amazfish (service + UI)&lt;br /&gt;
# Pair with you device:&lt;br /&gt;
## Unzip the DFU file to extract the .bin file.&lt;br /&gt;
## Click on &amp;quot;pair with watch&amp;quot; on the top&lt;br /&gt;
## Select &amp;quot;PineTime&amp;quot; (if your device is running InfiniTime 0.7.1 or lower) or &amp;quot;InfiniTime (if it's running InfiniTime 0.8+) and choose your device in the list&lt;br /&gt;
# Click on &amp;quot;Download file&amp;quot; on the top &lt;br /&gt;
# Click on &amp;quot;Choose file&amp;quot; and select the .bin file you extracted from the DFU file&lt;br /&gt;
# Click on &amp;quot;Send file&amp;quot;&lt;br /&gt;
# Wait for the update to complete.&lt;br /&gt;
&lt;br /&gt;
[https://video.codingfield.com/videos/watch/41cfcf5d-b0e6-4323-8056-b0a6682d1f25 See it in action!]&lt;br /&gt;
&lt;br /&gt;
== Update the bootloader ==&lt;br /&gt;
To update the bootloader, you want to flash [https://github.com/JF002/InfiniTime/releases/download/0.14.1/reloader-mcuboot.zip reloader-mcuboot.zip]. &lt;br /&gt;
Once the bootloader is updated, you should notice that the boot logo has changed. Previously, it was a green &amp;quot;PineTime&amp;quot; logo, and now it is a large pinecone that is progressively drawn in green.&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/fvHQ8ZeqnOo Video showing what the InfiniTime 1.0.0 bootloader looks like]&lt;br /&gt;
&lt;br /&gt;
=== Using Gadgetbridge ===&lt;br /&gt;
&lt;br /&gt;
Same process as before, but with the file for this step.&lt;br /&gt;
&lt;br /&gt;
=== Using NRFConnect ===&lt;br /&gt;
&lt;br /&gt;
Same process as before, but with the file for this step.&lt;br /&gt;
&lt;br /&gt;
=== Using Siglo ===&lt;br /&gt;
Same process as before, but select the &amp;quot;0.14.1&amp;quot; tag, and the file/asset for this step.&lt;br /&gt;
&lt;br /&gt;
=== Using Amazfish ===&lt;br /&gt;
&lt;br /&gt;
You may need to re-pair with your device by selecting &amp;quot;InfiniTime&amp;quot; (since you've already upgraded to InfiniTime 1.0) in the device type list. Then follow the same process as before, but with the file for this step.&lt;br /&gt;
&lt;br /&gt;
== Install the recovery firmware ==&lt;br /&gt;
{{warning|1=Don't do this before updating the bootloader, otherwise your PineTime will freeze at the end of the process, and you will need to wait for the battery to go flat }} &lt;br /&gt;
&lt;br /&gt;
To install the recovery firmware, you want to flash [https://github.com/JF002/InfiniTime/releases/download/0.14.1/pinetime-mcuboot-recovery-loader-dfu-0.14.1.zip pinetime-mcuboot-recovery-loader-dfu-0.14.1.zip]. You will know when this is running when it shows an InfiniTime logo with a progress bar running across the bottom whilst it is installing the recovery firmware. &lt;br /&gt;
&lt;br /&gt;
=== Using Gadgetbridge ===&lt;br /&gt;
&lt;br /&gt;
Same process as before, but with the file for this step.&lt;br /&gt;
&lt;br /&gt;
=== Using NRFConnect ===&lt;br /&gt;
&lt;br /&gt;
Same process as before, but with the file for this step.&lt;br /&gt;
&lt;br /&gt;
=== Using Siglo ===&lt;br /&gt;
Same process as before, but with the file/asset for this step.&lt;br /&gt;
&lt;br /&gt;
=== Using Amazfish ===&lt;br /&gt;
&lt;br /&gt;
Same process as before, but with the file for this step.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Guides and Videos =&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
Sometimes during the update process, the connection will drop, and the update will fail. Your PineTime isn't broken, most likely the Bluetooth link dropped for a moment, so just try again. Try rebooting your phone, if it keeps failing, try restarting the watch by holding the power button down for approximately 8 seconds. Try to '''avoid''' holding down the button with the screen off. Or try with another device, just in case there are compatibility issues. &lt;br /&gt;
&lt;br /&gt;
Version 1.0.0 of InfiniTime is merely the first version that was considered sufficiently feature-complete and stable enough for daily use. This isn't to say there aren't still bugs present ('cause there are!). So there are a few bugs still present in the update process and the bootloader. One unfortunate bug appears to be that sometimes when the watch tries to restart after an update, the bootloader locks up, and the watch won't turn on. In this case, you will need to wait until the watch battery goes flat, to force the watch to reset. This will most likely involve waiting for a week, and then when you put the watch on the charging cradle, it will power up and you should be right to try again.&lt;br /&gt;
&lt;br /&gt;
If you get stuck or have any questions, join us on your preferred [[Main_Page#Chat_Platforms|chat platform]] or the product [https://forum.pine64.org/forumdisplay.php?fid=134 forum]. There's usually someone available who can help, or will get back to you in a few hours.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]][[Category:Guide]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineTime_Hardware_Wishlist&amp;diff=10535</id>
		<title>PineTime Hardware Wishlist</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineTime_Hardware_Wishlist&amp;diff=10535"/>
		<updated>2021-05-27T12:31:16Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains a list of things people wish PineTime did differently&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
&lt;br /&gt;
* Long pressing the button should power-cycle the watch without any software being involved&lt;br /&gt;
* Other display tech could be explored. [//en.Wikipedia.org/wiki/Transflective_liquid-crystal_display A transflective LCD] would probably be a nice option. Or potentially OLED?&lt;br /&gt;
* Touchscreen should possibly have a configurable sensitivity level for both glove-wearing and droplet-resistance. Preferably it should still be a capacitive one, a resistive touchscreen would have too many trade-offs.&lt;br /&gt;
* A slightly bigger 256×256 pixel graphics display size is preferable for its binary alignment, affording some low-level simplicity – it has the property that its X and Y coordinates are each addressable with a single byte, with no out-of-bounds; its total number of pixels is 65536 (another power of 2), and each pixel is addressable with exactly 2 bytes, with perfect efficiency. The [http://Pelulamu.net/ibniz IBNIZ (Ideally Bare Numeric Impression giZmo) virtual machine], designed for fun minimalist demoscene graphics, has chosen 256×256 for its virtual display, and makes use of these simplicity advantages. If PineTime also chose 256×256 then it would be a target platform for unclipped IBNIZ demoscene programmes, which would be really fun to play around with on one's wrist!&lt;br /&gt;
* A full redraw on the display takes 120ms at the very least, which is 8Hz. A smooth scrolling/usage/animation experience would be 30Hz minimum, preferably 60. I heard a rumor that the SPI connection to the display is a bottleneck.&lt;br /&gt;
* Some sort of scroll wheel would be nice for convenience.&lt;br /&gt;
* Changed GPIO assignment so more functionality is available (i.e. NFC and VSYNC)&lt;br /&gt;
* Wireless charging, or Qi Charging capability&lt;br /&gt;
* An external RTC circuit saving the current time to allow the main MCU go to deep-sleep.&lt;br /&gt;
* nRF5840 update: QSPI, CryptoCell + Secure Key Storage, has more RAM, a coprocessor and the possibility to expose USB through power pins&lt;br /&gt;
* Preferably a pre-certified MCU module with a ceramic antenna&lt;br /&gt;
* Version without sensors but maybe bigger battery&lt;br /&gt;
* A couple of pins on the programmer connector to allow UART while developing (currently there is a TX test point on PCB). (Note: There's ARM SemiHosting and Segger RTT)&lt;br /&gt;
* Connect the pin of LCD controller that allows RD/WR from it in order to save RAM on the MCU. (The MOSI pin for the SPI is already connected to the nor flash that shares the same pins, pin number is P0.04)&lt;br /&gt;
* LCD must be centered on case. Currently is not and watchfaces seems different when clock is put on the other wrist.&lt;br /&gt;
* A NFC antenna around the case, connected to the NFC pins.&lt;br /&gt;
* Used sensors should be NDA-free and preferably also blob-free. For example the BMA421 accelerometer doesn't have a datasheet (it seems private to some hardware integrators): a more open one would be much easier to develop for. Special attention should be paid to advanced features, such as step counting integration or flick detection.&lt;br /&gt;
* PineTime SoC could support USB or have a FTDI chip with the relevant pins exposed. It could allow flashing a sealed device, just like Arduinos work. The same USB-C could also be used for charging. &lt;br /&gt;
* A bigger pulldown resistor for the power button, because 100k still leaks a noticeable amount of power when the button is always on.&lt;br /&gt;
* Ceramic Bluetooth antenna for better signal reception&lt;br /&gt;
* Ultra low quiescent current PMIC for better deep sleep. Better shipping/storage/turned off mode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Upgrade_PineTime_to_InfiniTime_1.0.0&amp;diff=10486</id>
		<title>Upgrade PineTime to InfiniTime 1.0.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Upgrade_PineTime_to_InfiniTime_1.0.0&amp;diff=10486"/>
		<updated>2021-05-22T09:58:36Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note|Page under construction, information subject to review and feedback.}}&lt;br /&gt;
&lt;br /&gt;
Congratulations on receiving your new PineTime!&lt;br /&gt;
&lt;br /&gt;
From the factory, it ships with InfiniTime 0.7.1, and an older bootloader. So now you're probably wondering exactly how on earth do you go about upgrading your watch to the latest and greatest version of InfiniTime - you know, that version you've seen all those great pictures, videos and reviews of. To those of us that are developing stuff for it, it's pretty easy and straightforward, but like with all technology, it is a bit tricky. &lt;br /&gt;
&lt;br /&gt;
{{warning|1=Some people ran into issues during the update process that would temporarily make their watch unusable (display frozen or blank). The only know workaround consists of waiting for the battery to drain completely and try again. With the display off, and battery fully charged, you can expect a wait of 5-7 days so it is best to not fully charge it. If it freezes with the display on, it will likely be flat by the end of the day. We've never heard of any PineTimes that were permanently bricked (were not recoverable), though. }} &lt;br /&gt;
&lt;br /&gt;
In a nutshell, you need to:&lt;br /&gt;
# Charge your watch, but '''not''' to 100% - keep it at approximately 50% - for the reason described above.&lt;br /&gt;
# Update InfiniTime&lt;br /&gt;
# Update the bootloader&lt;br /&gt;
# Install the recovery firmware&lt;br /&gt;
&lt;br /&gt;
= Update Process =&lt;br /&gt;
So how do you do this? Where do you start? Well, with a sealed PineTime, your only easy option is via Over The Air (OTA) Device Firmware Update (DFU), which is done via Bluetooth. There are a couple of different ways and apps you can use to do this. If you have an Android device, you can use [https://f-droid.org/en/packages/nodomain.freeyourgadget.gadgetbridge/ Gadgetbridge] or [https://play.google.com/store/apps/details?id=no.nordicsemi.android.mcp NRFConnect]. Otherwise, if your laptop or desktop computer has Bluetooth and runs Linux, you can use [https://github.com/alexr4535/siglo Siglo] or [https://github.com/piggz/harbour-amazfish Amazfish]. You can also use these applications on your Pinebook Pro or Pinephone if you happen to have those devices. &lt;br /&gt;
&lt;br /&gt;
The reason for installing the updates in the specified order is because newer versions of InfiniTime have a more robust Bluetooth update process, and since we're updating everything over Bluetooth, the fewer retries and failures from that you have the better. It will still sometimes disconnect mid update, meaning you'll need to try again, and possibly restart the watch a few times as well. And since the recovery firmware is new to the 1.0.0 version of the bootloader, it's best to update that last. &lt;br /&gt;
&lt;br /&gt;
[https://video.codingfield.com/videos/watch/831077c5-16f3-47b4-9b2b-c4bbfecc6529 This video] shows the bootloader and recovery firmware installation procedure.&lt;br /&gt;
&lt;br /&gt;
[https://video.codingfield.com/videos/watch/f7bffb3d-a6a1-43c4-8f01-f4aeff4adf9e This video] shows the bootloader installation and firmware update using Amazfish.&lt;br /&gt;
&lt;br /&gt;
You can also read a [https://github.com/JF002/pinetime-mcuboot-bootloader/blob/339224cf5ed21f4e8b2d22eaeab9869120f7f752/docs/howToUpdate.md detailed installation procedure in the documentation of the bootloader].&lt;br /&gt;
&lt;br /&gt;
== Update InfiniTime ==&lt;br /&gt;
To update the main InfiniTime app, you want to flash [https://github.com/JF002/InfiniTime/releases/download/1.0.0/pinetime-mcuboot-app-dfu-1.0.0.zip pinetime-mcuboot-app-dfu-1.0.0.zip].&lt;br /&gt;
&lt;br /&gt;
After updating InfiniTime, ensure that you validate the firmware to prevent it from being automatically reverted/rolled back if your watch is reset/restarted. To do this, swipe right to access the quick actions panel, press the gear/settings icon, swipe up once to show the second page, press on the 'Firmware' option and then on 'Validate'.&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/-5lwBd60k0Q Video showing validation process]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Gadgetbridge ===&lt;br /&gt;
&lt;br /&gt;
# Connect your PineTime to GB&lt;br /&gt;
# Download the aforementioned file to your phone&lt;br /&gt;
# Find the file in your file manager&lt;br /&gt;
# 'Open With' Gadgetbridge F/W Installer (method varies by device) - on my phone, it is press and hold, select the file, and then choose 'open with app' from the more options menu&lt;br /&gt;
# Confirm that you wish to apply the update&lt;br /&gt;
# Wait for the update to complete&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/Azi0uh8UZvI Video showing how to start the update]&lt;br /&gt;
&lt;br /&gt;
=== NRFConnect ===&lt;br /&gt;
&lt;br /&gt;
# Download the aforementioned file to your phone.&lt;br /&gt;
# Open NRFConnect&lt;br /&gt;
# Scan for your device&lt;br /&gt;
# Connect to it&lt;br /&gt;
# Choose the DFU option at the top right of the screen&lt;br /&gt;
# Ensure the 'Distribution packet (ZIP)' option is selected, and press OK&lt;br /&gt;
# Select your previously downloaded file&lt;br /&gt;
# Wait for the update to complete&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/jnX7WwYDiDE Video showing how to start the update]&lt;br /&gt;
&lt;br /&gt;
=== Siglo ===&lt;br /&gt;
# If your device was not detected upon start, press &amp;quot;Rescan&amp;quot; to find it.&lt;br /&gt;
# Select the &amp;quot;1.0.0&amp;quot; tag&lt;br /&gt;
# Select the aforementioned file/asset.&lt;br /&gt;
# Select &amp;quot;Flash It!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Amazfish ===&lt;br /&gt;
# Run Amazfish (service + UI)&lt;br /&gt;
# Pair with you device:&lt;br /&gt;
## Unzip the DFU file to extract the .bin file.&lt;br /&gt;
## Click on &amp;quot;pair with watch&amp;quot; on the top&lt;br /&gt;
## Select &amp;quot;PineTime&amp;quot; (if your device is running InfiniTime 0.7.1 or lower) or &amp;quot;InfiniTime (if it's running InfiniTime 0.8+) and choose your device in the list&lt;br /&gt;
# Click on &amp;quot;Download file&amp;quot; on the top &lt;br /&gt;
# Click on &amp;quot;Choose file&amp;quot; and select the .bin file you extracted from the DFU file&lt;br /&gt;
# Click on &amp;quot;Send file&amp;quot;&lt;br /&gt;
# Wait for the update to complete.&lt;br /&gt;
&lt;br /&gt;
[https://video.codingfield.com/videos/watch/41cfcf5d-b0e6-4323-8056-b0a6682d1f25 See it in action!]&lt;br /&gt;
&lt;br /&gt;
== Update the bootloader ==&lt;br /&gt;
To update the bootloader, you want to flash [https://github.com/JF002/InfiniTime/releases/download/0.14.1/reloader-mcuboot.zip reloader-mcuboot.zip]. &lt;br /&gt;
Once the bootloader is updated, you should notice that the boot logo has changed. Previously, it was a green &amp;quot;PineTime&amp;quot; logo, and now it is a large pinecone that is progressively drawn in green.&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/fvHQ8ZeqnOo Video showing what the InfiniTime 1.0.0 bootloader looks like]&lt;br /&gt;
&lt;br /&gt;
=== Using Gadgetbridge ===&lt;br /&gt;
&lt;br /&gt;
Same process as before, but with the file for this step.&lt;br /&gt;
&lt;br /&gt;
=== Using NRFConnect ===&lt;br /&gt;
&lt;br /&gt;
Same process as before, but with the file for this step.&lt;br /&gt;
&lt;br /&gt;
=== Using Siglo ===&lt;br /&gt;
Same process as before, but select the &amp;quot;0.14.1&amp;quot; tag, and the file/asset for this step.&lt;br /&gt;
&lt;br /&gt;
=== Using Amazfish ===&lt;br /&gt;
&lt;br /&gt;
You may need to re-pair with your device by selecting &amp;quot;InfiniTime&amp;quot; (since you've already upgraded to InfiniTime 1.0) in the device type list. Then follow the same process as before, but with the file for this step.&lt;br /&gt;
&lt;br /&gt;
== Install the recovery firmware ==&lt;br /&gt;
{{warning|1=Don't do this before updating the bootloader, otherwise your PineTime will freeze at the end of the process, and you will need to wait for the battery to go flat }} &lt;br /&gt;
&lt;br /&gt;
To install the recovery firmware, you want to flash [https://github.com/JF002/InfiniTime/releases/download/0.14.1/pinetime-mcuboot-recovery-loader-dfu-0.14.1.zip pinetime-mcuboot-recovery-loader-dfu-0.14.1.zip]. You will know when this is running when it shows an InfiniTime logo with a progress bar running across the bottom whilst it is installing the recovery firmware. &lt;br /&gt;
&lt;br /&gt;
=== Using Gadgetbridge ===&lt;br /&gt;
&lt;br /&gt;
Same process as before, but with the file for this step.&lt;br /&gt;
&lt;br /&gt;
=== Using NRFConnect ===&lt;br /&gt;
&lt;br /&gt;
Same process as before, but with the file for this step.&lt;br /&gt;
&lt;br /&gt;
=== Using Siglo ===&lt;br /&gt;
Same process as before, but with the file/asset for this step.&lt;br /&gt;
&lt;br /&gt;
=== Using Amazfish ===&lt;br /&gt;
&lt;br /&gt;
Same process as before, but with the file for this step.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Guides and Videos =&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
Sometimes during the update process, the connection will drop, and the update will fail. Your PineTime isn't broken, most likely the Bluetooth link dropped for a moment, so just try again. Try rebooting your phone, if it keeps failing, try restarting the watch by holding the power button down for approximately 8 seconds. Try to '''avoid''' holding down the button with the screen off. Or try with another device, just in case there are compatibility issues. &lt;br /&gt;
&lt;br /&gt;
Version 1.0.0 of InfiniTime is merely the first version that was considered sufficiently feature-complete and stable enough for daily use. This isn't to say there aren't still bugs present ('cause there are!). So there are a few bugs still present in the update process and the bootloader. One unfortunate bug appears to be that sometimes when the watch tries to restart after an update, the bootloader locks up, and the watch won't turn on. In this case, you will need to wait until the watch battery goes flat, to force the watch to reset. This will most likely involve waiting for a week, and then when you put the watch on the charging cradle, it will power up and you should be right to try again.&lt;br /&gt;
&lt;br /&gt;
If you get stuck or have any questions, join us on your preferred [https://wiki.pine64.org/index.php/Main_Page#Chat_Platforms chat platform] or the product [https://forum.pine64.org/forumdisplay.php?fid=134 forum]. There's usually someone available who can help, or will get back to you in a few hours.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Switching_your_PineTime_between_InfiniTime_and_Wasp-os&amp;diff=10485</id>
		<title>Switching your PineTime between InfiniTime and Wasp-os</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Switching_your_PineTime_between_InfiniTime_and_Wasp-os&amp;diff=10485"/>
		<updated>2021-05-22T09:58:14Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Both Infinitime and Wasp-os are very cool OS'es for the [[PineTime]] and many people will want to try both. This is possible, even with a sealed device!&lt;br /&gt;
&lt;br /&gt;
Both devices use the same Nordic (legacy) DFU protocol for updating firmware over the air. But the BLE stack and the bootloaders for both are different. That's why we need to use the [https://github.com/daniel-thompson/wasp-reloader reloader]. However, instructions you find elsewhere (including [https://www.youtube.com/watch?v=lPasAt1LJmo Daniel Thompsons video]) are somewhat outdated.&lt;br /&gt;
&lt;br /&gt;
Flashing can be done with any of&lt;br /&gt;
* nRF Connect for Mobile ([https://play.google.com/store/apps/details?id=no.nordicsemi.android.mcp Android], [https://apps.apple.com/us/app/nrf-connect-bluetooth-app/id1054362403 iOS])&lt;br /&gt;
* [https://www.gadgetbridge.org GadgetBridge] (Android &amp;gt;= 4.4)&lt;br /&gt;
* [https://github.com/piggz/harbour-amazfish Amazfish] (SailfishOS and Linux)&lt;br /&gt;
* [https://github.com/alexr4535/siglo Siglo] (Linux desktop and Pinephone) (Use the 'Manual OTA File' option)&lt;br /&gt;
* [https://github.com/ZephyrLabs/PinetimeFlasher PinetimeFlasher] (Windows)&lt;br /&gt;
* ota-dfu-python (Linux CLI) which is included in sources of both Infinitime and Wasp-os&lt;br /&gt;
** &amp;lt;code&amp;gt;InfiniTime/bootloader/ota-dfu-python/dfu.py&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;wasp-os/tools/ota-dfu-python/dfu.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide has been last updated for Infinitime 1.1.0 and Wasp-os 0.4&lt;br /&gt;
&lt;br /&gt;
== InfiniTime =&amp;gt; Wasp-os ==&lt;br /&gt;
&lt;br /&gt;
All the zips you need can be found on the [https://github.com/daniel-thompson/wasp-os/releases/ Wasp-os Releases] page, for example in [https://github.com/daniel-thompson/wasp-os/releases/download/v0.4/wasp-os-0.4.tar.gz wasp-os-0.4.tar.gz].&lt;br /&gt;
&lt;br /&gt;
* Make sure the watch is running Infinitime and can be found by your companion device (PC, phone, etc).&lt;br /&gt;
* First we need to flash the reloader, with the wasp-os bootloader as payload. To do this, flash: &amp;lt;br&amp;gt;&amp;lt;code&amp;gt;wasp-os-0.4/build-pinetime/reloader-mcuboot.zip&amp;lt;/code&amp;gt;&lt;br /&gt;
* After flashing, it will boot using the Infinitime bootloader (green large pine cone), then it'll hang for a few seconds, then it'll show the reloader animation (blue smaller pine cone), and then it'll boot the wasp-os bootloader.&lt;br /&gt;
* Make sure the watch is on the screen with the pine cone and arrow. If it is in a bootloop instead, then reboot the watch by holding the button until the arrow appears.&lt;br /&gt;
* Now you can flash micropython with wasp-os: &amp;lt;br&amp;gt;&amp;lt;code&amp;gt;wasp-os-0.4/build-pinetime/micropython.zip&amp;lt;/code&amp;gt;&lt;br /&gt;
* Wasp-os should now boot. Enjoy!&lt;br /&gt;
&lt;br /&gt;
== Wasp-os =&amp;gt; InfiniTime ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;reloader-factory.zip&amp;lt;/code&amp;gt; are unfortunately broken in waps-os 0.4, and very outdated in older releases. I do not recommend flashing these. Older InfiniTime versions have flaky BLE which makes upgrading from there very unreliable. Trying to create new zips containing any recent version of InfiniTime also fails, because it has grown too big to fit inaide a zip together with the reloader and bootloader.&lt;br /&gt;
&lt;br /&gt;
Instead, I made my own containing just the [https://github.com/JF002/InfiniTime/releases/tag/0.14.1 InfiniTime 0.14.1] [https://github.com/JF002/pinetime-mcuboot-bootloader/blob/develop/README.md#recovery-firmware recovery firmware]. This allows you to flash any future release of InfiniTime without having to find a new reloader zip. [https://github.com/Peetz0r/wasp-reloader/releases/tag/infinitime-0.14.1-recovery Get the zip here].&lt;br /&gt;
&lt;br /&gt;
* Reboot the watch by holding the button until the pine cone arrow appears.&lt;br /&gt;
* Flash the reloader zip: &amp;lt;br&amp;gt;&amp;lt;code&amp;gt;reloader-infinitime-recovery-0.14.1.zip&amp;lt;/code&amp;gt;&lt;br /&gt;
* After flashing, the reloader will run (blue smaller pine cone), then it'll boot the InfiniTime bootloader (large pine cone) will run.&lt;br /&gt;
* Boot the watch into recovery mode by holding the button until the pine cone turns red. It'll boot again (large pine cone will turn green) and then the InfiniTime loo will appear.&lt;br /&gt;
* You can now flash InfiniTime 1.1.0 (or any other version): &amp;lt;br&amp;gt;&amp;lt;code&amp;gt;reloader-infinitime-recovery-0.14.1.zip&amp;lt;/code&amp;gt;&lt;br /&gt;
* InfiniTime should now boot. Enjoy!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Upgrade_PineTime_to_InfiniTime_1.0.0&amp;diff=10460</id>
		<title>Upgrade PineTime to InfiniTime 1.0.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Upgrade_PineTime_to_InfiniTime_1.0.0&amp;diff=10460"/>
		<updated>2021-05-19T21:35:41Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note|Page under construction, information subject to review and feedback.}}&lt;br /&gt;
&lt;br /&gt;
Congratulations on receiving your new PineTime!&lt;br /&gt;
&lt;br /&gt;
From the factory, it ships with InfiniTime 0.7.1, and an older bootloader. So now you're probably wondering exactly how on earth do you go about upgrading your watch to the latest and greatest version of InfiniTime - you know, that version you've seen all those great pictures, videos and reviews of. To those of us that are developing stuff for it, it's pretty easy and straightforward, but like with all technology, it is a bit tricky. &lt;br /&gt;
&lt;br /&gt;
{{warning|1=Some people ran into issues during the update process that would temporarily make their watch unusable (display frozen or blank). The only know workaround consists of waiting for the battery to drain completely and try again. With the display off, and battery fully charged, you can expect a wait of 5-7 days so it is best to not fully charge it. If it freezes with the display on, it will likely be flat by the end of the day. We've never heard of any PineTimes that were permanently bricked (were not recoverable), though. }} &lt;br /&gt;
&lt;br /&gt;
In a nutshell, you need to:&lt;br /&gt;
# Charge your watch, but '''not''' to 100% - keep it at approximately 50% - for the reason described above.&lt;br /&gt;
# Update InfiniTime&lt;br /&gt;
# Update the bootloader&lt;br /&gt;
# Install the recovery firmware&lt;br /&gt;
&lt;br /&gt;
= Update Process =&lt;br /&gt;
So how do you do this? Where do you start? Well, with a sealed PineTime, your only easy option is via Over The Air (OTA) Device Firmware Update (DFU), which is done via Bluetooth. There are a couple of different ways and apps you can use to do this. If you have an Android device, you can use [https://f-droid.org/en/packages/nodomain.freeyourgadget.gadgetbridge/ Gadgetbridge] or [https://play.google.com/store/apps/details?id=no.nordicsemi.android.mcp NRFConnect]. Otherwise, if your laptop or desktop computer has Bluetooth and runs Linux, you can use [https://github.com/alexr4535/siglo Siglo] or [https://github.com/piggz/harbour-amazfish Amazfish]. You can also use these applications on your Pinebook Pro or Pinephone if you happen to have those devices. &lt;br /&gt;
&lt;br /&gt;
The reason for installing the updates in the specified order is because newer versions of InfiniTime have a more robust Bluetooth update process, and since we're updating everything over Bluetooth, the fewer retries and failures from that you have the better. It will still sometimes disconnect mid update, meaning you'll need to try again, and possibly restart the watch a few times as well. And since the recovery firmware is new to the 1.0.0 version of the bootloader, it's best to update that last. &lt;br /&gt;
&lt;br /&gt;
[https://video.codingfield.com/videos/watch/831077c5-16f3-47b4-9b2b-c4bbfecc6529 This video] shows the bootloader and recovery firmware installation procedure.&lt;br /&gt;
&lt;br /&gt;
[https://video.codingfield.com/videos/watch/f7bffb3d-a6a1-43c4-8f01-f4aeff4adf9e This video] shows the bootloader installation and firmware update using Amazfish.&lt;br /&gt;
&lt;br /&gt;
You can also read a [https://github.com/JF002/pinetime-mcuboot-bootloader/blob/339224cf5ed21f4e8b2d22eaeab9869120f7f752/docs/howToUpdate.md detailed installation procedure in the documentation of the bootloader].&lt;br /&gt;
&lt;br /&gt;
== Update InfiniTime ==&lt;br /&gt;
To update the main InfiniTime app, you want to flash [https://github.com/JF002/InfiniTime/releases/download/1.0.0/pinetime-mcuboot-app-dfu-1.0.0.zip pinetime-mcuboot-app-dfu-1.0.0.zip].&lt;br /&gt;
&lt;br /&gt;
After updating InfiniTime, ensure that you validate the firmware to prevent it from being automatically reverted/rolled back if your watch is reset/restarted. To do this, swipe right to access the quick actions panel, press the gear/settings icon, swipe up once to show the second page, press on the 'Firmware' option and then on 'Validate'.&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/-5lwBd60k0Q Video showing validation process]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Gadgetbridge ===&lt;br /&gt;
&lt;br /&gt;
# Connect your PineTime to GB&lt;br /&gt;
# Download the aforementioned file to your phone&lt;br /&gt;
# Find the file in your file manager&lt;br /&gt;
# 'Open With' Gadgetbridge F/W Installer (method varies by device) - on my phone, it is press and hold, select the file, and then choose 'open with app' from the more options menu&lt;br /&gt;
# Confirm that you wish to apply the update&lt;br /&gt;
# Wait for the update to complete&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/Azi0uh8UZvI Video showing how to start the update]&lt;br /&gt;
&lt;br /&gt;
=== NRFConnect ===&lt;br /&gt;
&lt;br /&gt;
# Download the aforementioned file to your phone.&lt;br /&gt;
# Open NRFConnect&lt;br /&gt;
# Scan for your device&lt;br /&gt;
# Connect to it&lt;br /&gt;
# Choose the DFU option at the top right of the screen&lt;br /&gt;
# Ensure the 'Distribution packet (ZIP)' option is selected, and press OK&lt;br /&gt;
# Select your previously downloaded file&lt;br /&gt;
# Wait for the update to complete&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/jnX7WwYDiDE Video showing how to start the update]&lt;br /&gt;
&lt;br /&gt;
=== Siglo ===&lt;br /&gt;
# If your device was not detected upon start, press &amp;quot;Rescan&amp;quot; to find it.&lt;br /&gt;
# Select the &amp;quot;1.0.0&amp;quot; tag&lt;br /&gt;
# Select the aforementioned file/asset.&lt;br /&gt;
# Select &amp;quot;Flash It!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Amazfish ===&lt;br /&gt;
# Run Amazfish (service + UI)&lt;br /&gt;
# Pair with you device:&lt;br /&gt;
## Unzip the DFU file to extract the .bin file.&lt;br /&gt;
## Click on &amp;quot;pair with watch&amp;quot; on the top&lt;br /&gt;
## Select &amp;quot;PineTime&amp;quot; (if your device is running InfiniTime 0.7.1 or lower) or &amp;quot;InfiniTime (if it's running InfiniTime 0.8+) and choose your device in the list&lt;br /&gt;
# Click on &amp;quot;Download file&amp;quot; on the top &lt;br /&gt;
# Click on &amp;quot;Choose file&amp;quot; and select the .bin file you extracted from the DFU file&lt;br /&gt;
# Click on &amp;quot;Send file&amp;quot;&lt;br /&gt;
# Wait for the update to complete.&lt;br /&gt;
&lt;br /&gt;
[https://video.codingfield.com/videos/watch/41cfcf5d-b0e6-4323-8056-b0a6682d1f25 See it in action!]&lt;br /&gt;
&lt;br /&gt;
== Update the bootloader ==&lt;br /&gt;
To update the bootloader, you want to flash [https://github.com/JF002/InfiniTime/releases/download/0.14.1/reloader-mcuboot.zip reloader-mcuboot.zip]. &lt;br /&gt;
Once the bootloader is updated, you should notice that the boot logo has changed. Previously, it was a green &amp;quot;PineTime&amp;quot; logo, and now it is a large pinecone that is progressively drawn in green.&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/fvHQ8ZeqnOo Video showing what the InfiniTime 1.0.0 bootloader looks like]&lt;br /&gt;
&lt;br /&gt;
=== Using Gadgetbridge ===&lt;br /&gt;
&lt;br /&gt;
Same process as before, but with the file for this step.&lt;br /&gt;
&lt;br /&gt;
=== Using NRFConnect ===&lt;br /&gt;
&lt;br /&gt;
Same process as before, but with the file for this step.&lt;br /&gt;
&lt;br /&gt;
=== Using Siglo ===&lt;br /&gt;
Same process as before, but select the &amp;quot;0.14.1&amp;quot; tag, and the file/asset for this step.&lt;br /&gt;
&lt;br /&gt;
=== Using Amazfish ===&lt;br /&gt;
&lt;br /&gt;
You may need to re-pair with your device by selecting &amp;quot;InfiniTime&amp;quot; (since you've already upgraded to InfiniTime 1.0) in the device type list. Then follow the same process as before, but with the file for this step.&lt;br /&gt;
&lt;br /&gt;
== Install the recovery firmware ==&lt;br /&gt;
{{warning|1=Don't do this before updating the bootloader, otherwise your PineTime will freeze at the end of the process, and you will need to wait for the battery to go flat }} &lt;br /&gt;
&lt;br /&gt;
To install the recovery firmware, you want to flash [https://github.com/JF002/InfiniTime/releases/download/0.14.1/pinetime-mcuboot-recovery-loader-dfu-0.14.1.zip pinetime-mcuboot-recovery-loader-dfu-0.14.1.zip]. You will know when this is running when it shows an InfiniTime logo with a progress bar running across the bottom whilst it is installing the recovery firmware. &lt;br /&gt;
&lt;br /&gt;
=== Using Gadgetbridge ===&lt;br /&gt;
&lt;br /&gt;
Same process as before, but with the file for this step.&lt;br /&gt;
&lt;br /&gt;
=== Using NRFConnect ===&lt;br /&gt;
&lt;br /&gt;
Same process as before, but with the file for this step.&lt;br /&gt;
&lt;br /&gt;
=== Using Siglo ===&lt;br /&gt;
Same process as before, but with the file/asset for this step.&lt;br /&gt;
&lt;br /&gt;
=== Using Amazfish ===&lt;br /&gt;
&lt;br /&gt;
Same process as before, but with the file for this step.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Guides and Videos =&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
Sometimes during the update process, the connection will drop, and the update will fail. Your PineTime isn't broken, most likely the Bluetooth link dropped for a moment, so just try again. Try rebooting your phone, if it keeps failing, try restarting the watch by holding the power button down for approximately 8 seconds. Try to '''avoid''' holding down the button with the screen off. Or try with another device, just in case there are compatibility issues. &lt;br /&gt;
&lt;br /&gt;
Version 1.0.0 of InfiniTime is merely the first version that was considered sufficiently feature-complete and stable enough for daily use. This isn't to say there aren't still bugs present ('cause there are!). So there are a few bugs still present in the update process and the bootloader. One unfortunate bug appears to be that sometimes when the watch tries to restart after an update, the bootloader locks up, and the watch won't turn on. In this case, you will need to wait until the watch battery goes flat, to force the watch to reset. This will most likely involve waiting for a week, and then when you put the watch on the charging cradle, it will power up and you should be right to try again.&lt;br /&gt;
&lt;br /&gt;
If you get stuck or have any questions, join us on your preferred [https://wiki.pine64.org/index.php/Main_Page#Chat_Platforms chat platform] or the product [https://forum.pine64.org/forumdisplay.php?fid=134 forum]. There's usually someone available who can help, or will get back to you in a few hours.&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineTime_Development&amp;diff=10239</id>
		<title>PineTime Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineTime_Development&amp;diff=10239"/>
		<updated>2021-05-04T21:16:07Z</updated>

		<summary type="html">&lt;p&gt;Avamander: /* Available firmware and projects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reprogramming ==&lt;br /&gt;
&lt;br /&gt;
[[PineTime devkit wiring|Wire it up]] and then [[Reprogramming the PineTime| flash something]].&lt;br /&gt;
&lt;br /&gt;
== Available firmware and projects ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! Project Homepage&lt;br /&gt;
! Project Source&lt;br /&gt;
! PineTime Implementations&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! FreeRTOS&lt;br /&gt;
|https://www.freertos.org&lt;br /&gt;
| https://sourceforge.net/projects/freertos/&lt;br /&gt;
|&lt;br /&gt;
{|&lt;br /&gt;
|[[InfiniTime]] (GitHub: [https://github.com/JF002/Pinetime JF002/Pinetime])&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/kaythe/pinetime-os kaythe/pinetime-os]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Zephyr&lt;br /&gt;
| https://www.zephyrproject.org&lt;br /&gt;
| https://github.com/zephyrproject-rtos/zephyr&lt;br /&gt;
|&lt;br /&gt;
{|&lt;br /&gt;
|[https://github.com/najnesnaj/pinetime-zephyr najnesnaj/pinetime-zephyr]&lt;br /&gt;
|- &lt;br /&gt;
|[https://github.com/SuperPrower/pinetime_zephyr_sample_fw SuperPrower/pinetime_zephyr_sample_fw]&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/Dejvino/pinetime-hermes-firmware Dejvino/pinetime-hermes-firmware]&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/endian-albin/pinetime-hypnos endian-albin/pinetime-hypnos]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! mynewt&lt;br /&gt;
| https://mynewt.apache.org/about/&lt;br /&gt;
| https://github.com/apache/mynewt-core&lt;br /&gt;
|&lt;br /&gt;
{|&lt;br /&gt;
|[https://github.com/lupyuen/pinetime-rust-mynewt lupyuen/pinetime-rust-mynewt]&lt;br /&gt;
|-&lt;br /&gt;
|[https://gitlab.com/caspermeijn/klok caspermeijn/klok]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! MbedOS&lt;br /&gt;
| https://os.mbed.com&lt;br /&gt;
| https://github.com/ARMmbed/mbed-os&lt;br /&gt;
|&lt;br /&gt;
{|&lt;br /&gt;
|[https://github.com/sethitow/mbed-pinetime sethitow/mbed-pinetime]&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/geoffrey-vl/mbed-pinetime geoffrey.vl/mbed-pinetime]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! RIOT&lt;br /&gt;
| http://riot-os.org/&lt;br /&gt;
| https://github.com/RIOT-OS/RIOT/&lt;br /&gt;
| [https://github.com/bosmoment/PineTime-apps bosmoment/PineTime-apps]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! TinyGo&lt;br /&gt;
| https://tinygo.org&lt;br /&gt;
| https://github.com/tinygo-org/tinygo&lt;br /&gt;
| [https://github.com/aykevl/go-smartwatch aykevl/go-smartwatch]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! wasp-os (MicroPython)&lt;br /&gt;
| https://wasp-os.readthedocs.io/&lt;br /&gt;
| https://github.com/daniel-thompson/wasp-os&lt;br /&gt;
| [https://wasp-os.readthedocs.io/en/latest/install.html#pine64-pinetime-developer-edition WaspOS PineTime install guide]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Rust + RTFM&lt;br /&gt;
| https://rtfm.rs/&lt;br /&gt;
| [https://github.com/rtfm-rs/cortex-m-rtfm rtfm-rs/cortex-m-rtfm]&lt;br /&gt;
| https://github.com/dbrgn/pinetime-rtfm/&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Bare Metal&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
{|&lt;br /&gt;
|https://github.com/xriss/timecake&lt;br /&gt;
|-&lt;br /&gt;
|https://github.com/Arc13/Pyrus&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{|&lt;br /&gt;
|[https://github.com/xriss/timecake xriss/timecake]&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/Arc13/Pyrus Arc13/Pyrus]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! AdaFruit bootloader&lt;br /&gt;
|&lt;br /&gt;
| https://github.com/adafruit/Adafruit_nRF52_Bootloader&lt;br /&gt;
| [https://github.com/daniel-thompson/wasp-bootloader daniel-thompson/wasp-bootloader]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Useful drivers&lt;br /&gt;
|&lt;br /&gt;
| https://github.com/sethitow/mbed-pinetime&lt;br /&gt;
| [https://github.com/sethitow/mbed-pinetime/tree/master/drivers https://github.com/sethitow/mbed-pinetime]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! Project Homepage&lt;br /&gt;
! Project Source&lt;br /&gt;
! PineTime Implementations&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Gadgetbridge (Android companion app)&lt;br /&gt;
| https://gadgetbridge.org/&lt;br /&gt;
| https://codeberg.org/Freeyourgadget/Gadgetbridge&lt;br /&gt;
| InfiniTime support in mainline&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Arduino&lt;br /&gt;
| https://youtu.be/4aFDjymXjOw&lt;br /&gt;
| https://github.com/atc1441/ATCwatch&lt;br /&gt;
| https://github.com/atc1441/ATCwatch&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! OTA Update Flasher / DaFlasher&lt;br /&gt;
| https://youtu.be/gUVEz-pxhgg&lt;br /&gt;
| https://github.com/atc1441/DaFlasherFiles&lt;br /&gt;
| https://github.com/atc1441/DaFlasherFiles&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! InfiniTime companion app for Linux&lt;br /&gt;
| [https://github.com/alexr4535/siglo alexr4535/siglo]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Wasp-os companion app for Linux&lt;br /&gt;
| [https://github.com/arteeh/wasp-companion arteeh/wasp-companion]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! UI design proposal&lt;br /&gt;
| [https://github.com/arteeh/pinetime arteeh/pinetime]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Flashing app for Linux&lt;br /&gt;
| [https://github.com/arteeh/pinetime-flasher arteeh/pinetime-flasher]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Flashing app for Windows&lt;br /&gt;
| [https://github.com/ZephyrLabs/PinetimeFlasher ZephyrLabs/PinetimeFlasher]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Manuals ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/JF002/Pinetime InfiniTime installation]&lt;br /&gt;
* [https://github.com/najnesnaj/pinetime-zephyr Zephyr installation] Beginner manual which explains how to install Zephyr (by najnesnaj).&lt;br /&gt;
* [https://wasp-os.readthedocs.io/en/latest/ Wasp-OS installation] Full manual with install instructions and an application writer's guide.&lt;br /&gt;
&lt;br /&gt;
== How to write battery friendly software? ==&lt;br /&gt;
&lt;br /&gt;
The key to save battery is to enable only what you need when you need it. nRF52832 has a lot of functionalities allowing you to draw as little current as possible. Here are some tips and tricks:&lt;br /&gt;
&lt;br /&gt;
* Disable / shutdown / put in sleep mode '''all devices around the MCU''' (display controller, touch controller, external memory,...). &lt;br /&gt;
* Disable all '''peripheral inside the MCU''' when you don't need them (SPI, TWI(I²C),...). The power management of the NRF52832 is very smart and will completely shut down (power off and disable the clock) the peripheral when the software disables it.&lt;br /&gt;
* Put the MCU to sleep as soon and as often as possible. If you are not using a RTOS, this is done by calling ''WFE'' (wait for event) instruction. Most of the time, RTOS implement this functionality. For example, FreeRTOS calls it the ''tickless mode'' : it puts the CPU in sleep mode when no task is planned for execution for more than a specified time, and wakes up as soon as an event is detected or when a task is ready to run.&lt;br /&gt;
* Do not use logging (JLink RTT, SWO, semihosting,...), it uses a lot of power.&lt;br /&gt;
* Ensure that the debug circuitry of the MCU is not enabled when you measuring the battery life. The debug peripheral is enabled as soon as you connect a debugger to the device, and '''is not automatically disabled''', even if you disconnect the debugger you will have to wait for the battery to go flat to disable to port. The software running in the NRF52832 cannot disable the debug peripheral. How to disable the debug circuitry:&lt;br /&gt;
  - using ''nrfjprog --reset''&lt;br /&gt;
  - using JLinkExe : issue the command ''writeDP 1 0''&lt;br /&gt;
&lt;br /&gt;
  or with OpenOCD&lt;br /&gt;
  - issue the command ''halt''&lt;br /&gt;
  - issue the command ''flash fillw 0x10001208 0xFFFFFF00 0x01''&lt;br /&gt;
  - issue the command ''reset''&lt;br /&gt;
&lt;br /&gt;
  you can check if the debug port is enabled using the following code&lt;br /&gt;
  DWT-&amp;gt;CYCCNT ? &amp;quot;NO&amp;quot;:&amp;quot;YES&amp;quot;&lt;br /&gt;
* Read [https://infocenter.nordicsemi.com/pdf/nRF52832_Rev_2_Errata_v1.1.pdf the errata sheet of the MCU] and apply workarounds if they apply to your software.&lt;br /&gt;
&lt;br /&gt;
== Wishlist ==&lt;br /&gt;
&lt;br /&gt;
In order to keep track of features and changes to the hardware people would like to see, check out this article: [[PineTime Hardware Wishlist]]&lt;br /&gt;
&lt;br /&gt;
== Compatibility with other projects ==&lt;br /&gt;
&lt;br /&gt;
Different firmware running using different bootloaders and Bluetooth stacks on the nRF52832 have different requirements on how they should be initialised and what should be placed where in the internal flash.&lt;br /&gt;
&lt;br /&gt;
To keep track of what, how and why things work like they do across the different projects, check out the [[PineTime SD MCUBoot|PineTime SoftDevice and MCUBoot compatibility]] article.&lt;br /&gt;
&lt;br /&gt;
== Compatibility with companions apps and Bluetooth communication ==&lt;br /&gt;
&lt;br /&gt;
There are a lot of different firmware running on the Pinetime that implement different BLE APIs (time synchronization, notifications, ...). Companion apps must be able to differentiate between different firmware and forks of the same firmware. See [[PineTime Bluetooth]].&lt;br /&gt;
&lt;br /&gt;
== PineTime equivalents and jailbreaking ==&lt;br /&gt;
&lt;br /&gt;
This page contains a list of PineTime-like smartwatches that might be &amp;quot;jailbreakable&amp;quot; or a good source for ideas for the PineTime: [[PineTime Equivalents]]&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Upgrade_PineTime_to_InfiniTime_1.0.0&amp;diff=10231</id>
		<title>Upgrade PineTime to InfiniTime 1.0.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Upgrade_PineTime_to_InfiniTime_1.0.0&amp;diff=10231"/>
		<updated>2021-05-04T14:57:57Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note|Page under construction, information subject to review and feedback.}}&lt;br /&gt;
&lt;br /&gt;
Congratulations on receiving your new PineTime!&lt;br /&gt;
&lt;br /&gt;
From the factory, it ships with InfiniTime 0.7.1, and an older bootloader. So now you're probably wondering exactly how on earth do you go about upgrading your watch to the latest and greatest version of InfiniTime - you know, that version you've seen all those great pictures, videos and reviews of. To those that of us that are developing stuff for it, its pretty easy and straightforward, but like with all technology, it is a bit tricky. &lt;br /&gt;
&lt;br /&gt;
{{warning|1=Some people ran into issues during the update process that would temporarily make their watch unusable (display frozen or blank). The only know workaround consists of waiting for the battery to drain completely and try again. We've never heard of any PineTimes that were permanently bricked (were not recoverable), though. }} &lt;br /&gt;
&lt;br /&gt;
In a nutshell, you need to:&lt;br /&gt;
# '''Not''' charge the watch to a 100%, keep it at ~50%, for the reason described above.&lt;br /&gt;
# Update InfiniTime&lt;br /&gt;
# Update the bootloader&lt;br /&gt;
# Install the recovery firmware&lt;br /&gt;
&lt;br /&gt;
= Update Process =&lt;br /&gt;
So how do you do this? Where do you start? Well, with a sealed PineTime, your only easy option is via Over The Air (OTA) Device Firmware Update (DFU), which is done via Bluetooth. There are a couple of different ways and apps you can use to do this. If you have an Android device, you can use [https://f-droid.org/en/packages/nodomain.freeyourgadget.gadgetbridge/ Gadgetbridge] or [https://play.google.com/store/apps/details?id=no.nordicsemi.android.mcp NRFConnect]. Otherwise, if your laptop or desktop computer has bluetooth and runs Linux, you can use [https://github.com/alexr4535/siglo Siglo]. You can also use [https://github.com/alexr4535/siglo Siglo] on your Pinebook Pro or Pinephone if you happen to have those devices. &lt;br /&gt;
&lt;br /&gt;
The reason for installing the updates in the the specified order is because newer versions of InfiniTime have a more robust bluetooth update process, and since we're updating everything over Bluetooth, the less retries and failures from that you have the better. It will still sometimes disconnect mid update, meaning you'll need to try again, and possibly restart the watch a few times as well. And since the recovery firmware is new to the 1.0.0 version of the bootloader, it's best to update that last. &lt;br /&gt;
&lt;br /&gt;
== Update InfiniTime ==&lt;br /&gt;
To update the main InfiniTime app, you want to flash [https://github.com/JF002/InfiniTime/releases/download/1.0.0/pinetime-mcuboot-app-dfu-1.0.0.zip pinetime-mcuboot-app-dfu-1.0.0.zip].&lt;br /&gt;
&lt;br /&gt;
=== Gadgetbridge ===&lt;br /&gt;
&lt;br /&gt;
# Download the aforementioned file to your phone.&lt;br /&gt;
# Find the file in your file manager. &lt;br /&gt;
# 'Open With' Gadgetbridge F/W Installer (method varies by device) - on my phone, it is press and hold, select the file, and then choose 'open with app' from the more options menu&lt;br /&gt;
# If Gadgetbridge gives an 'Element cannot be installed' error, add '.fw' to the end of the downloaded zip file, and try again.&lt;br /&gt;
# Confirm that you wish to apply the update&lt;br /&gt;
# Wait for the update to complete&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/Azi0uh8UZvI Video showing how to start the update]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== NRFConnect ===&lt;br /&gt;
&lt;br /&gt;
# Download the aforementioned file to your phone.&lt;br /&gt;
# Open NRFConnect&lt;br /&gt;
# Scan for for your device&lt;br /&gt;
# Connect to it&lt;br /&gt;
# Choose the DFU option at the top right of the screen&lt;br /&gt;
# Ensure the 'Distribution packet (ZIP)' option is selected, and press OK&lt;br /&gt;
# Select your previously downloaded file&lt;br /&gt;
# Wait for the update to complete&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/jnX7WwYDiDE Video showing how to start the update]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Siglo ===&lt;br /&gt;
In Siglo, you can do this by picking the 1.0.0 tag, and flashing the aforementioned file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Update the bootloader ==&lt;br /&gt;
To update the bootloader, you want to flash [https://github.com/JF002/InfiniTime/releases/tag/0.14.1 reloader-mcuboot.zip]. &lt;br /&gt;
&lt;br /&gt;
=== Using Gadgetbridge ===&lt;br /&gt;
&lt;br /&gt;
Same as above.&lt;br /&gt;
&lt;br /&gt;
=== Using NRFConnect ===&lt;br /&gt;
&lt;br /&gt;
Same as above.&lt;br /&gt;
&lt;br /&gt;
=== Using Siglo ===&lt;br /&gt;
In Siglo, you can do this by picking the 0.14.1 tag, and flashing the aforementioned file. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Install the recovery firmware ==&lt;br /&gt;
To install the recovery firmware, you want to flash [https://github.com/JF002/InfiniTime/releases/tag/0.14.1 pinetime-mcuboot-recovery-loader-dfu-0.14.1.zip].&lt;br /&gt;
&lt;br /&gt;
=== Using Gadgetbridge ===&lt;br /&gt;
&lt;br /&gt;
Same as above.&lt;br /&gt;
&lt;br /&gt;
=== Using NRFConnect ===&lt;br /&gt;
&lt;br /&gt;
Same as above.&lt;br /&gt;
&lt;br /&gt;
=== Using Siglo ===&lt;br /&gt;
In Siglo, you can do this by picking the 0.14.1 tag, and flashing the aforementioned file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Guides and Videos =&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
Sometimes during the update process, the connection will drop, and the update will fail. Your PineTime isn't broken, most likely the Bluetooth link dropped for a moment, so just try again. Try rebooting your phone, if it keeps failing, try restarting the watch by holding the power button down for approximately 8 seconds. Try to '''avoid''' holding down the button with the screen off. Or try with another device, just in case there are compatibility issues. &lt;br /&gt;
&lt;br /&gt;
Version 1.0.0 of InfiniTime is merely the first version that was considered sufficiently feature complete and stable enough for daily use. This isn't to say there aren't still bugs present ('cause there are!). So there are a few bugs still present in the update process and the bootloader. One unfortunate bug appears to be that sometimes when the watch tries to restart after an update, the bootloader locks up, and the watch won't turn on. In this case, you will need to wait until the watch battery goes flat, in order to force the watch to reset. This will most likely involve waiting for a week, and then when you put the watch on the charge cradle, it will power up and you should be right to try again.&lt;br /&gt;
&lt;br /&gt;
If you get stuck, or have any questions, join us on your preferred [https://wiki.pine64.org/index.php/Main_Page#Chat_Platforms chat platform] or on the product [https://forum.pine64.org/forumdisplay.php?fid=134 forum]. There's usually someone available who can help, or will get back to you in a few hours.&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Upgrade_PineTime_to_InfiniTime_1.0.0&amp;diff=10230</id>
		<title>Upgrade PineTime to InfiniTime 1.0.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Upgrade_PineTime_to_InfiniTime_1.0.0&amp;diff=10230"/>
		<updated>2021-05-04T14:54:01Z</updated>

		<summary type="html">&lt;p&gt;Avamander: /* Troubleshooting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note|Page under construction, information subject to review and feedback.}}&lt;br /&gt;
&lt;br /&gt;
Congratulations on receiving your new PineTime!&lt;br /&gt;
&lt;br /&gt;
From the factory, it ships with InfiniTime 0.7.1, and an older bootloader. So now you're probably wondering exactly how on earth do you go about upgrading your watch to the latest and greatest version of InfiniTime - you know, that version you've seen all those great pictures, videos and reviews of. To those that of us that are developing stuff for it, its pretty easy and straightforward, but like with all technology, it is a bit tricky. &lt;br /&gt;
&lt;br /&gt;
{{warning|1=Some people ran into issues during the update process that would temporarily make their watch unusable (display frozen or blank). The only know workaround consists of waiting for the battery to drain completely and try again. We've never heard of any PineTimes that were permanently bricked (were not recoverable), though. }} &lt;br /&gt;
&lt;br /&gt;
In a nutshell, you need to:&lt;br /&gt;
# Update InfiniTime&lt;br /&gt;
# Update the bootloader&lt;br /&gt;
# Install the recovery firmware&lt;br /&gt;
&lt;br /&gt;
= Update Process =&lt;br /&gt;
So how do you do this? Where do you start? Well, with a sealed PineTime, your only easy option is via Over The Air (OTA) Device Firmware Update (DFU), which is done via Bluetooth. There are a couple of different ways and apps you can use to do this. If you have an Android device, you can use [https://f-droid.org/en/packages/nodomain.freeyourgadget.gadgetbridge/ Gadgetbridge] or [https://play.google.com/store/apps/details?id=no.nordicsemi.android.mcp NRFConnect]. Otherwise, if your laptop or desktop computer has bluetooth and runs Linux, you can use [https://github.com/alexr4535/siglo Siglo]. You can also use [https://github.com/alexr4535/siglo Siglo] on your Pinebook Pro or Pinephone if you happen to have those devices. &lt;br /&gt;
&lt;br /&gt;
The reason for installing the updates in the the specified order is because newer versions of InfiniTime have a more robust bluetooth update process, and since we're updating everything over Bluetooth, the less retries and failures from that you have the better. It will still sometimes disconnect mid update, meaning you'll need to try again, and possibly restart the watch a few times as well. And since the recovery firmware is new to the 1.0.0 version of the bootloader, it's best to update that last. &lt;br /&gt;
&lt;br /&gt;
== Update InfiniTime ==&lt;br /&gt;
To update the main InfiniTime app, you want to flash [https://github.com/JF002/InfiniTime/releases/download/1.0.0/pinetime-mcuboot-app-dfu-1.0.0.zip pinetime-mcuboot-app-dfu-1.0.0.zip].&lt;br /&gt;
&lt;br /&gt;
=== Gadgetbridge ===&lt;br /&gt;
&lt;br /&gt;
# Download the aforementioned file to your phone.&lt;br /&gt;
# Find the file in your file manager. &lt;br /&gt;
# 'Open With' Gadgetbridge F/W Installer (method varies by device) - on my phone, it is press and hold, select the file, and then choose 'open with app' from the more options menu&lt;br /&gt;
# If Gadgetbridge gives an 'Element cannot be installed' error, add '.fw' to the end of the downloaded zip file, and try again.&lt;br /&gt;
# Confirm that you wish to apply the update&lt;br /&gt;
# Wait for the update to complete&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/Azi0uh8UZvI Video showing how to start the update]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== NRFConnect ===&lt;br /&gt;
&lt;br /&gt;
# Download the aforementioned file to your phone.&lt;br /&gt;
# Open NRFConnect&lt;br /&gt;
# Scan for for your device&lt;br /&gt;
# Connect to it&lt;br /&gt;
# Choose the DFU option at the top right of the screen&lt;br /&gt;
# Ensure the 'Distribution packet (ZIP)' option is selected, and press OK&lt;br /&gt;
# Select your previously downloaded file&lt;br /&gt;
# Wait for the update to complete&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/jnX7WwYDiDE Video showing how to start the update]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Siglo ===&lt;br /&gt;
In Siglo, you can do this by picking the 1.0.0 tag, and flashing the aforementioned file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Update the bootloader ==&lt;br /&gt;
To update the bootloader, you want to flash [https://github.com/JF002/InfiniTime/releases/tag/0.14.1 reloader-mcuboot.zip]. &lt;br /&gt;
&lt;br /&gt;
=== Using Gadgetbridge ===&lt;br /&gt;
&lt;br /&gt;
Same as above.&lt;br /&gt;
&lt;br /&gt;
=== Using NRFConnect ===&lt;br /&gt;
&lt;br /&gt;
Same as above.&lt;br /&gt;
&lt;br /&gt;
=== Using Siglo ===&lt;br /&gt;
In Siglo, you can do this by picking the 0.14.1 tag, and flashing the aforementioned file. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Install the recovery firmware ==&lt;br /&gt;
To install the recovery firmware, you want to flash [https://github.com/JF002/InfiniTime/releases/tag/0.14.1 pinetime-mcuboot-recovery-loader-dfu-0.14.1.zip].&lt;br /&gt;
&lt;br /&gt;
=== Using Gadgetbridge ===&lt;br /&gt;
&lt;br /&gt;
Same as above.&lt;br /&gt;
&lt;br /&gt;
=== Using NRFConnect ===&lt;br /&gt;
&lt;br /&gt;
Same as above.&lt;br /&gt;
&lt;br /&gt;
=== Using Siglo ===&lt;br /&gt;
In Siglo, you can do this by picking the 0.14.1 tag, and flashing the aforementioned file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Guides and Videos =&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
Sometimes during the update process, the connection will drop, and the update will fail. Your PineTime isn't broken, most likely the Bluetooth link dropped for a moment, so just try again. Try rebooting your phone, if it keeps failing, try restarting the watch by holding the power button down for approximately 8 seconds. Try to '''avoid''' holding down the button with the screen off. Or try with another device, just in case there are compatibility issues. &lt;br /&gt;
&lt;br /&gt;
Version 1.0.0 of InfiniTime is merely the first version that was considered sufficiently feature complete and stable enough for daily use. This isn't to say there aren't still bugs present ('cause there are!). So there are a few bugs still present in the update process and the bootloader. One unfortunate bug appears to be that sometimes when the watch tries to restart after an update, the bootloader locks up, and the watch won't turn on. In this case, you will need to wait until the watch battery goes flat, in order to force the watch to reset. This will most likely involve waiting for a week, and then when you put the watch on the charge cradle, it will power up and you should be right to try again.&lt;br /&gt;
&lt;br /&gt;
If you get stuck, or have any questions, join us on your preferred [https://wiki.pine64.org/index.php/Main_Page#Chat_Platforms chat platform] or on the product [https://forum.pine64.org/forumdisplay.php?fid=134 forum]. There's usually someone available who can help, or will get back to you in a few hours.&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Upgrade_PineTime_to_InfiniTime_1.0.0&amp;diff=10229</id>
		<title>Upgrade PineTime to InfiniTime 1.0.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Upgrade_PineTime_to_InfiniTime_1.0.0&amp;diff=10229"/>
		<updated>2021-05-04T14:53:51Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note|Page under construction, information subject to review and feedback.}}&lt;br /&gt;
&lt;br /&gt;
Congratulations on receiving your new PineTime!&lt;br /&gt;
&lt;br /&gt;
From the factory, it ships with InfiniTime 0.7.1, and an older bootloader. So now you're probably wondering exactly how on earth do you go about upgrading your watch to the latest and greatest version of InfiniTime - you know, that version you've seen all those great pictures, videos and reviews of. To those that of us that are developing stuff for it, its pretty easy and straightforward, but like with all technology, it is a bit tricky. &lt;br /&gt;
&lt;br /&gt;
{{warning|1=Some people ran into issues during the update process that would temporarily make their watch unusable (display frozen or blank). The only know workaround consists of waiting for the battery to drain completely and try again. We've never heard of any PineTimes that were permanently bricked (were not recoverable), though. }} &lt;br /&gt;
&lt;br /&gt;
In a nutshell, you need to:&lt;br /&gt;
# Update InfiniTime&lt;br /&gt;
# Update the bootloader&lt;br /&gt;
# Install the recovery firmware&lt;br /&gt;
&lt;br /&gt;
= Update Process =&lt;br /&gt;
So how do you do this? Where do you start? Well, with a sealed PineTime, your only easy option is via Over The Air (OTA) Device Firmware Update (DFU), which is done via Bluetooth. There are a couple of different ways and apps you can use to do this. If you have an Android device, you can use [https://f-droid.org/en/packages/nodomain.freeyourgadget.gadgetbridge/ Gadgetbridge] or [https://play.google.com/store/apps/details?id=no.nordicsemi.android.mcp NRFConnect]. Otherwise, if your laptop or desktop computer has bluetooth and runs Linux, you can use [https://github.com/alexr4535/siglo Siglo]. You can also use [https://github.com/alexr4535/siglo Siglo] on your Pinebook Pro or Pinephone if you happen to have those devices. &lt;br /&gt;
&lt;br /&gt;
The reason for installing the updates in the the specified order is because newer versions of InfiniTime have a more robust bluetooth update process, and since we're updating everything over Bluetooth, the less retries and failures from that you have the better. It will still sometimes disconnect mid update, meaning you'll need to try again, and possibly restart the watch a few times as well. And since the recovery firmware is new to the 1.0.0 version of the bootloader, it's best to update that last. &lt;br /&gt;
&lt;br /&gt;
== Update InfiniTime ==&lt;br /&gt;
To update the main InfiniTime app, you want to flash [https://github.com/JF002/InfiniTime/releases/download/1.0.0/pinetime-mcuboot-app-dfu-1.0.0.zip pinetime-mcuboot-app-dfu-1.0.0.zip].&lt;br /&gt;
&lt;br /&gt;
=== Gadgetbridge ===&lt;br /&gt;
&lt;br /&gt;
# Download the aforementioned file to your phone.&lt;br /&gt;
# Find the file in your file manager. &lt;br /&gt;
# 'Open With' Gadgetbridge F/W Installer (method varies by device) - on my phone, it is press and hold, select the file, and then choose 'open with app' from the more options menu&lt;br /&gt;
# If Gadgetbridge gives an 'Element cannot be installed' error, add '.fw' to the end of the downloaded zip file, and try again.&lt;br /&gt;
# Confirm that you wish to apply the update&lt;br /&gt;
# Wait for the update to complete&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/Azi0uh8UZvI Video showing how to start the update]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== NRFConnect ===&lt;br /&gt;
&lt;br /&gt;
# Download the aforementioned file to your phone.&lt;br /&gt;
# Open NRFConnect&lt;br /&gt;
# Scan for for your device&lt;br /&gt;
# Connect to it&lt;br /&gt;
# Choose the DFU option at the top right of the screen&lt;br /&gt;
# Ensure the 'Distribution packet (ZIP)' option is selected, and press OK&lt;br /&gt;
# Select your previously downloaded file&lt;br /&gt;
# Wait for the update to complete&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/jnX7WwYDiDE Video showing how to start the update]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Siglo ===&lt;br /&gt;
In Siglo, you can do this by picking the 1.0.0 tag, and flashing the aforementioned file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Update the bootloader ==&lt;br /&gt;
To update the bootloader, you want to flash [https://github.com/JF002/InfiniTime/releases/tag/0.14.1 reloader-mcuboot.zip]. &lt;br /&gt;
&lt;br /&gt;
=== Using Gadgetbridge ===&lt;br /&gt;
&lt;br /&gt;
Same as above.&lt;br /&gt;
&lt;br /&gt;
=== Using NRFConnect ===&lt;br /&gt;
&lt;br /&gt;
Same as above.&lt;br /&gt;
&lt;br /&gt;
=== Using Siglo ===&lt;br /&gt;
In Siglo, you can do this by picking the 0.14.1 tag, and flashing the aforementioned file. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Install the recovery firmware ==&lt;br /&gt;
To install the recovery firmware, you want to flash [https://github.com/JF002/InfiniTime/releases/tag/0.14.1 pinetime-mcuboot-recovery-loader-dfu-0.14.1.zip].&lt;br /&gt;
&lt;br /&gt;
=== Using Gadgetbridge ===&lt;br /&gt;
&lt;br /&gt;
Same as above.&lt;br /&gt;
&lt;br /&gt;
=== Using NRFConnect ===&lt;br /&gt;
&lt;br /&gt;
Same as above.&lt;br /&gt;
&lt;br /&gt;
=== Using Siglo ===&lt;br /&gt;
In Siglo, you can do this by picking the 0.14.1 tag, and flashing the aforementioned file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Guides and Videos =&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
Sometimes during the update process, the connection will drop, and the update will fail. Your PineTime isn't broken, most likely the Bluetooth link dropped for a moment, so just try again. Try rebooting your phone, if it keeps failing, try restarting the watch by holding the power button down for approximately 8 seconds. Try to ''avoid'' holding down the button with the screen off. Or try with another device, just in case there are compatibility issues. &lt;br /&gt;
&lt;br /&gt;
Version 1.0.0 of InfiniTime is merely the first version that was considered sufficiently feature complete and stable enough for daily use. This isn't to say there aren't still bugs present ('cause there are!). So there are a few bugs still present in the update process and the bootloader. One unfortunate bug appears to be that sometimes when the watch tries to restart after an update, the bootloader locks up, and the watch won't turn on. In this case, you will need to wait until the watch battery goes flat, in order to force the watch to reset. This will most likely involve waiting for a week, and then when you put the watch on the charge cradle, it will power up and you should be right to try again.&lt;br /&gt;
&lt;br /&gt;
If you get stuck, or have any questions, join us on your preferred [https://wiki.pine64.org/index.php/Main_Page#Chat_Platforms chat platform] or on the product [https://forum.pine64.org/forumdisplay.php?fid=134 forum]. There's usually someone available who can help, or will get back to you in a few hours.&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Upgrade_PineTime_to_InfiniTime_1.0.0&amp;diff=10228</id>
		<title>Upgrade PineTime to InfiniTime 1.0.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Upgrade_PineTime_to_InfiniTime_1.0.0&amp;diff=10228"/>
		<updated>2021-05-04T14:49:25Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note|Page under construction, information subject to review and feedback.}}&lt;br /&gt;
&lt;br /&gt;
Congratulations on receiving your new PineTime!&lt;br /&gt;
&lt;br /&gt;
From the factory, it ships with InfiniTime 0.7.1, and an older bootloader. So now you're probably wondering exactly how on earth do you go about upgrading your watch to the latest and greatest version of InfiniTime - you know, that version you've seen all those great pictures, videos and reviews of. To those that of us that are developing stuff for it, its pretty easy and straightforward, but like with all technology, it is a bit tricky. &lt;br /&gt;
&lt;br /&gt;
{{warning|1=Some people ran into issues during the update process that would temporarily make their watch unusable (display frozen or blank). The only know workaround consists of waiting for the battery to drain completely and try again. We've never heard of any PineTimes that were permanently bricked (were not recoverable), though. }} &lt;br /&gt;
&lt;br /&gt;
In a nutshell, you need to:&lt;br /&gt;
# Update InfiniTime&lt;br /&gt;
# Update the bootloader&lt;br /&gt;
# Install the recovery firmware&lt;br /&gt;
&lt;br /&gt;
= Update Process =&lt;br /&gt;
So how do you do this? Where do you start? Well, with a sealed PineTime, your only easy option is via Over The Air (OTA) Device Firmware Update (DFU), which is done via Bluetooth. There are a couple of different ways and apps you can use to do this. If you have an Android device, you can use [https://f-droid.org/en/packages/nodomain.freeyourgadget.gadgetbridge/ Gadgetbridge] or [https://play.google.com/store/apps/details?id=no.nordicsemi.android.mcp NRFConnect]. Otherwise, if your laptop or desktop computer has bluetooth and runs Linux, you can use [https://github.com/alexr4535/siglo Siglo]. You can also use [https://github.com/alexr4535/siglo Siglo] on your Pinebook Pro or Pinephone if you happen to have those devices. &lt;br /&gt;
&lt;br /&gt;
The reason for installing the updates in the the specified order is because newer versions of InfiniTime have a more robust bluetooth update process, and since we're updating everything over Bluetooth, the less retries and failures from that you have the better. It will still sometimes disconnect mid update, meaning you'll need to try again, and possibly restart the watch a few times as well. And since the recovery firmware is new to the 1.0.0 version of the bootloader, it's best to update that last. &lt;br /&gt;
&lt;br /&gt;
== Update InfiniTime ==&lt;br /&gt;
To update the main InfiniTime app, you want to flash [https://github.com/JF002/InfiniTime/releases/download/1.0.0/pinetime-mcuboot-app-dfu-1.0.0.zip pinetime-mcuboot-app-dfu-1.0.0.zip].&lt;br /&gt;
&lt;br /&gt;
=== Gadgetbridge ===&lt;br /&gt;
&lt;br /&gt;
# Download the aforementioned file to your phone.&lt;br /&gt;
# Find the file in your file manager. &lt;br /&gt;
# 'Open With' Gadgetbridge F/W Installer (method varies by device) - on my phone, it is press and hold, select the file, and then choose 'open with app' from the more options menu&lt;br /&gt;
# If Gadgetbridge gives an 'Element cannot be installed' error, add '.fw' to the end of the downloaded zip file, and try again.&lt;br /&gt;
# Confirm that you wish to apply the update&lt;br /&gt;
# Wait for the update to complete&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/Azi0uh8UZvI Video showing how to start the update]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== NRFConnect ===&lt;br /&gt;
&lt;br /&gt;
# Download the aforementioned file to your phone.&lt;br /&gt;
# Open NRFConnect&lt;br /&gt;
# Scan for for your device&lt;br /&gt;
# Connect to it&lt;br /&gt;
# Choose the DFU option at the top right of the screen&lt;br /&gt;
# Ensure the 'Distribution packet (ZIP)' option is selected, and press OK&lt;br /&gt;
# Select your previously downloaded file&lt;br /&gt;
# Wait for the update to complete&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/jnX7WwYDiDE Video showing how to start the update]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Siglo ===&lt;br /&gt;
In Siglo, you can do this by picking the 1.0.0 tag, and flashing the aforementioned file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Update the bootloader ==&lt;br /&gt;
To update the bootloader, you want to flash [https://github.com/JF002/InfiniTime/releases/tag/0.14.1 reloader-mcuboot.zip]. &lt;br /&gt;
&lt;br /&gt;
=== Using Gadgetbridge ===&lt;br /&gt;
&lt;br /&gt;
Same as above.&lt;br /&gt;
&lt;br /&gt;
=== Using NRFConnect ===&lt;br /&gt;
&lt;br /&gt;
=== Using Siglo ===&lt;br /&gt;
In Siglo, you can do this by picking the 0.14.1 tag, and flashing the aforementioned file. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Install the recovery firmware ==&lt;br /&gt;
To install the recovery firmware, you want to flash [https://github.com/JF002/InfiniTime/releases/tag/0.14.1 pinetime-mcuboot-recovery-loader-dfu-0.14.1.zip].&lt;br /&gt;
&lt;br /&gt;
=== Using Gadgetbridge ===&lt;br /&gt;
&lt;br /&gt;
Same as above.&lt;br /&gt;
&lt;br /&gt;
=== Using NRFConnect ===&lt;br /&gt;
&lt;br /&gt;
=== Using Siglo ===&lt;br /&gt;
In Siglo, you can do this by picking the 0.14.1 tag, and flashing the aforementioned file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Guides and Videos =&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
Sometimes during the update process, the connection will drop, and the update will fail. Your PineTime isn't broken, most likely the bluetooth link dropped out for a moment, so just try again. If it keeps failing, try restarting the watch by holding the power button down for approximately 8 seconds. Or try with another device, just in case there are compatibility issues. &lt;br /&gt;
&lt;br /&gt;
Version 1.0.0 of InfiniTime is merely the first version that was considered sufficiently feature complete and stable enough for daily use. This isn't to say there aren't still bugs present ('cause there are!). So there are a few bugs still present in the update process and the bootloader. One unfortunate bug appears to be that sometimes when the watch tries to restart after an update, the bootloader locks up, and the watch won't turn on. In this case, you will need to wait until the watch battery goes flat, in order to force the watch to reset. This will most likely involve waiting for a week, and then when you put the watch on the charge cradle, it will power up and you should be right to try again.&lt;br /&gt;
&lt;br /&gt;
If you get stuck, or have any questions, join us on your preferred [https://wiki.pine64.org/index.php/Main_Page#Chat_Platforms chat platform] or on the product [https://forum.pine64.org/forumdisplay.php?fid=134 forum]. There's usually someone available who can help, or will get back to you in a few hours.&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineTime&amp;diff=10191</id>
		<title>PineTime</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineTime&amp;diff=10191"/>
		<updated>2021-05-01T18:05:21Z</updated>

		<summary type="html">&lt;p&gt;Avamander: /* Short overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Frequently asked questions ==&lt;br /&gt;
&lt;br /&gt;
'''Read these first!'''&lt;br /&gt;
&lt;br /&gt;
* [[PineTime FAQ| Frequently Asked Questions about the devkit]]&lt;br /&gt;
* [[Reprogramming the PineTime|Reprogramming the PineTime (development kit)]]&lt;br /&gt;
&lt;br /&gt;
== Default OS ==&lt;br /&gt;
&lt;br /&gt;
The current default operating system on the PineTime is called [[InfiniTime]], you can find more information about the firmware on its GitHub page. First devkits shipped with a proprietary custom firmware.&lt;br /&gt;
&lt;br /&gt;
You can find a list of available firmware and other software here: [[PineTime Development]]&lt;br /&gt;
&lt;br /&gt;
== Short overview ==&lt;br /&gt;
'''Dimensions:''' 37.5 x 40 x 11mm &amp;lt;br&amp;gt;&lt;br /&gt;
'''Weight:''' 38 grams &amp;lt;br&amp;gt;&lt;br /&gt;
'''IP Rating:''' IP67 (waterproof to 1 meter (sealed edition!)) &amp;lt;br&amp;gt;&lt;br /&gt;
'''Display:'''&lt;br /&gt;
: '''Size:''' 1.3 inches (33mm) diagonal&lt;br /&gt;
: '''Type:''' IPS capacitive touchscreen, RGB 65K colors&lt;br /&gt;
: '''Display Controller:''' ST7789&lt;br /&gt;
: '''Resolution:''' 240x240 pixels &amp;lt;br&amp;gt;&lt;br /&gt;
'''System on Chip:''' Nordic Semiconductor nRF52832 &amp;lt;br&amp;gt;&lt;br /&gt;
'''Flash:''' 512KB with additional 4MB SPI NOR &amp;lt;br&amp;gt;&lt;br /&gt;
'''RAM:''' 64KB &amp;lt;br&amp;gt;&lt;br /&gt;
'''Bluetooth:''' [[PineTime_Bluetooth|5.0 (including Bluetooth Low Energy)]] &amp;lt;br&amp;gt;&lt;br /&gt;
'''Sensors:''' Accelerometer, Heart rate sensor &amp;lt;br&amp;gt;&lt;br /&gt;
'''Feedback:''' Vibration motor &amp;lt;br&amp;gt;&lt;br /&gt;
'''Battery:''' 170-180mAh 3.8V LiPo&lt;br /&gt;
&lt;br /&gt;
= Community =&lt;br /&gt;
&lt;br /&gt;
== Forum ==&lt;br /&gt;
* [https://forum.pine64.org/forumdisplay.php?fid=134 PineTime forum]&lt;br /&gt;
&lt;br /&gt;
== Chat ==&lt;br /&gt;
* [https://app.element.io/#/room/#pinetime:matrix.org Matrix Channel] (No login required to read)&lt;br /&gt;
* IRC Server: [ircs://irc.pine64.org#pinetime irc.pine64.org] Channel: PineTime&lt;br /&gt;
* [https://t.me/pinetime Telegram group]&lt;br /&gt;
* [https://discordapp.com/invite/DgB7kzr Discord server invite link]&lt;br /&gt;
&lt;br /&gt;
=== Developers and coding ===&lt;br /&gt;
* [https://app.element.io/#/room/#pinetime-dev:matrix.org Matrix Channel] (No login required to read)&lt;br /&gt;
* [https://t.me/pinetime_dev Telegram group]&lt;br /&gt;
* [https://discordapp.com/invite/DgB7kzr Discord server invite link]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Development efforts ==&lt;br /&gt;
&lt;br /&gt;
To read more about development on the PineTime, the projects available and more technical details, check out [[PineTime Development]]&lt;br /&gt;
&lt;br /&gt;
== Useful articles and blog posts == &lt;br /&gt;
&lt;br /&gt;
If you want to dive in to the ecosystem, here's a short list of various articles and blog posts that can help you set up your soft- or hardware development environment.&lt;br /&gt;
&lt;br /&gt;
* [https://www.ncartron.org/one-week-with-my-pinetime---a-feedback.html Using the PineTime in production (January 2021)]&lt;br /&gt;
&lt;br /&gt;
* [https://medium.com/swlh/sneak-peek-of-pinetime-smart-watch-and-why-its-perfect-for-teaching-iot-81b74161c159 Sneak Peek of PineTime Smart Watch… And why it’s perfect for teaching IoT]&lt;br /&gt;
&lt;br /&gt;
* [https://medium.com/@ly.lee/building-a-rust-driver-for-pinetimes-touch-controller-cbc1a5d5d3e9 Building a Rust Driver for PineTime’s Touch Controller]&lt;br /&gt;
&lt;br /&gt;
* [https://medium.com/@ly.lee/porting-druid-rust-widgets-to-pinetime-smart-watch-7e1d5a5d977a Porting (druid) Rust Widgets to PineTime Smart Watch]&lt;br /&gt;
&lt;br /&gt;
* [https://medium.com/@ly.lee/optimising-pinetimes-display-driver-with-rust-and-mynewt-3ba269ea2f5c Optimising PineTime’s Display Driver with Rust and Mynewt]&lt;br /&gt;
&lt;br /&gt;
* [https://electronut.in/getting-started-with-zephyr-rtos-on-nordic-nrf52832-hackable/ Getting Started with Zephyr RTOS on Nordic nRF52832 hackaBLE]&lt;br /&gt;
&lt;br /&gt;
* [https://blog.aegrel.ee/absniffer-cmsis-dap-sniffer.html Removing the lock and installing another firmware on the nRF52832 using CMSIS-DAP dongle on Linux]&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/JF002/nrf52-baseproject/wiki/Build,-program-and-debug-NRF52-project-with-JLink,-CMake-and-CLion Build, program and debug NRF52 project with JLink, CMake and CLion]&lt;br /&gt;
&lt;br /&gt;
* [https://www.nrbtech.io/blog/2020/1/4/using-clion-for-nordic-nrf52-projects Using CLion for Nordic nRF52 projects]&lt;br /&gt;
&lt;br /&gt;
* [https://dev.to/aaronc81/flashing-your-pinetime-using-an-st-link-and-openocd-54dd Flashing your PineTime using an ST-Link and OpenOCD]&lt;br /&gt;
&lt;br /&gt;
* [https://zephyrlabs.github.io/Watchfaces/ Zephyrlabs: just a bunch of watchfaces made for the pinetime]&lt;br /&gt;
&lt;br /&gt;
*[https://pankajraghav.com/2021/04/03/PINETIME-STOPCLOCK.html Creating a stopwatch in Pinetime (with Infinitime)]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
=== Display ===&lt;br /&gt;
&lt;br /&gt;
Note: The factory-default software on the PineTime does not auto-detect the display being disconnected when it has already booted. That can cause garbled output, to fix it just restart the PineTime.&lt;br /&gt;
&lt;br /&gt;
The display is driven using the ST7789 display controller. Use the following pins to drive the screen:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PineTime pin&lt;br /&gt;
! ST7789 pin&lt;br /&gt;
|-&lt;br /&gt;
| LCD_SCK (P0.02)&lt;br /&gt;
| SPI clock&lt;br /&gt;
|-&lt;br /&gt;
| LCD_SDI (P0.03)&lt;br /&gt;
| SPI MOSI&lt;br /&gt;
|-&lt;br /&gt;
| LCD_RS (P0.18)&lt;br /&gt;
| Command/Data pin (CD)&lt;br /&gt;
|-&lt;br /&gt;
| LCD_CS (P0.25)&lt;br /&gt;
| Chip select&lt;br /&gt;
|-&lt;br /&gt;
| LCD_RESET (P0.26)&lt;br /&gt;
| Display reset&lt;br /&gt;
|-&lt;br /&gt;
| LCD_BACKLIGHT_{LOW,MID,HIGH}&lt;br /&gt;
| Backlight (active low)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
&lt;br /&gt;
* Chip select must be held low while driving the display. It must be high when using other SPI devices on the same bus (such as external flash storage) so that the display controller won't respond to the wrong commands.&lt;br /&gt;
* SPI must be used in mode 3. Mode 0 (the default) won't work.&lt;br /&gt;
* LCD_DISPLAY_* is used to enable the backlight. Set at least one to low to see anything on the screen.&lt;br /&gt;
* Use SPI at 8MHz (the fastest clock available on the nRF52832) because otherwise refreshing will be super slow.&lt;br /&gt;
&lt;br /&gt;
'''References''':&lt;br /&gt;
&lt;br /&gt;
[https://github.com/adafruit/Adafruit-ST7735-Library/ Adafruit ST7789 driver in cpp]&lt;br /&gt;
&lt;br /&gt;
=== Battery measurement ===&lt;br /&gt;
&lt;br /&gt;
Reading whether the PineTime has power attached is easy: simply read the charge indication pin (P0.12). When it is high it is running on battery, when it is low it is charging.&lt;br /&gt;
&lt;br /&gt;
Reading the battery voltage is a bit harder. For that you can use the battery voltage pin on P0.31 (AIN7). The returned value is 12 bits, which means it is 0..4095. You can get the measured voltage with the following formula, assuming a reference voltage of 3.3V (this is configurable in the ADC):&lt;br /&gt;
&lt;br /&gt;
 adcVoltage = adcValue / (4095 / 3.3)&lt;br /&gt;
&lt;br /&gt;
The measured voltage is actually half of the actual battery voltage, because the ADC is connected between a voltage divider where both resistors are 1MΩ. This can be corrected by multiplying the value:&lt;br /&gt;
&lt;br /&gt;
 batteryVoltage = adcValue * 2 / (4095 / 3.3)&lt;br /&gt;
&lt;br /&gt;
It's often better to avoid floating point values on embedded systems and in this case there is no reason to use float at all, we can just represent the value in millivolts. Therefore the formula can be simplified to:&lt;br /&gt;
&lt;br /&gt;
 batteryVoltage = adcValue * 2000 / (4095 / 3.3)&lt;br /&gt;
 batteryVoltage = adcValue * 2000 / 1241&lt;br /&gt;
&lt;br /&gt;
Converting this voltage to an estimated capacity in percent requires a more complicated algorithm, because Lithium-ion batteries have a non-linear discharge curve.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Button ===&lt;br /&gt;
&lt;br /&gt;
The button on the side of the PineTime is disabled by default. To enable it, drive the button out pin (P0.15) high.&lt;br /&gt;
&lt;br /&gt;
While enabled, the button in pin (P0.13) will be high when the button is pressed, and low when it is not pressed.&lt;br /&gt;
&lt;br /&gt;
=== Touch panel ===&lt;br /&gt;
&lt;br /&gt;
The touch panel is controlled by a Hynitron CST816S chips. Unfortunately, there is not much information about this chip on the internet apart from the datasheet below and a [https://github.com/lupyuen/hynitron_i2c_cst0xxse/ reference driver]. This is enough to implement a basic driver, but crucial information needed to implement advanced functionalities are missing (I²C protocol and registers, timings, power modes,...).&lt;br /&gt;
&lt;br /&gt;
==== Pins ====&lt;br /&gt;
&lt;br /&gt;
* P0.10 : Reset&lt;br /&gt;
* P0.28 : Interrupt (signal to the CPU when a touch event is detected)&lt;br /&gt;
* P0.06 : I²C SDA&lt;br /&gt;
* P0.07 : I²C SCL&lt;br /&gt;
&lt;br /&gt;
==== I²C ====&lt;br /&gt;
&lt;br /&gt;
* Device address : 0x15&lt;br /&gt;
* Frequency : from 10Khz to 400Khz&lt;br /&gt;
&lt;br /&gt;
'''NOTE: ''' The controller go to sleep when no event is detected. In sleep mode, the controller does not communicate on the I²C bus (it appears disconnected). So, for the communication to work, you need to tap on the screen so that the chip wakes-up.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: ''' The I²C bus, also known as TWI bus has known issues, make sure to write your TWI driver with timeouts.&lt;br /&gt;
&lt;br /&gt;
==== Touch events ====&lt;br /&gt;
&lt;br /&gt;
Touch information is available from the 63 first registers of the controller. Remember: the device is in sleep mode when no touch event is detected. It means that you can read the register only when the touch controller detected an event. You can use the ''Interrupt'' pin to detect such event in the software. &lt;br /&gt;
&lt;br /&gt;
These 63 bytes contain up to 10 touch point (X, Y, event type, pressure,...) : &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Bit7&lt;br /&gt;
! Bit6&lt;br /&gt;
! Bit5&lt;br /&gt;
! Bit4&lt;br /&gt;
! Bit3&lt;br /&gt;
! Bit2&lt;br /&gt;
! Bit1&lt;br /&gt;
! Bit0&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|colspan=&amp;quot;8&amp;quot;|?&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|colspan=&amp;quot;8&amp;quot;|GestureID : (Gesture code ,&lt;br /&gt;
&lt;br /&gt;
0x00: no gesture,&lt;br /&gt;
&lt;br /&gt;
0x01: Slide down,&lt;br /&gt;
&lt;br /&gt;
0x02: Slide up,&lt;br /&gt;
&lt;br /&gt;
0x03: Slide left,&lt;br /&gt;
&lt;br /&gt;
0x04: Slide right,&lt;br /&gt;
&lt;br /&gt;
0x05: Single click,&lt;br /&gt;
&lt;br /&gt;
0x0B: Double click,&lt;br /&gt;
&lt;br /&gt;
0x0C: Long press) &lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;|? &lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;|Number of touch points &lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|Event (0 = Down, 1 = Up, 2 = Contact)&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|?&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;|X (MSB) coordinate&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|colspan=&amp;quot;8&amp;quot;|X (LSB) coordinate&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|?&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|Touch ID&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;|Y (MSB) coordinate&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|colspan=&amp;quot;8&amp;quot;|Y (LSB) coordinate&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|colspan=&amp;quot;8&amp;quot;|Pressure (?)&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|colspan=&amp;quot;8&amp;quot;|Miscellaneous (?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bytes 3 to 8 are repeated 10 times (10*6 + 3 = 63 bytes).&lt;br /&gt;
&lt;br /&gt;
'''NOTES'''&lt;br /&gt;
&lt;br /&gt;
* The touch controller seems to report only 1 touch point&lt;br /&gt;
* Fields X, Y, Number of touch points and touch ID are updated. The others are always 0.&lt;br /&gt;
&lt;br /&gt;
==== Registers ====&lt;br /&gt;
&lt;br /&gt;
The reference driver specifies some registers and value, but there is no information about them: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
!Register&lt;br /&gt;
!Address&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_INT_CNT&lt;br /&gt;
|0x8F&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_FLOW_WORK_CNT&lt;br /&gt;
|0x91&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_WORKMODE &lt;br /&gt;
|0x00&lt;br /&gt;
|0 = WORK, 0x40 = FACTORY&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_CHIP_ID&lt;br /&gt;
|0xA3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_CHIP_ID2&lt;br /&gt;
|0x9F&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_POWER_MODE&lt;br /&gt;
|0xA5&lt;br /&gt;
|0x03 = SLEEP (reset the touchpanel using the reset pin before using this register : pin_low, delay 5ms, pin_high, delay 50ms then write 3 to register 0xA5)&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_FW_VER&lt;br /&gt;
|0xA6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_VENDOR_ID&lt;br /&gt;
|0xA8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_LCD_BUSY_NUM&lt;br /&gt;
|0xAB&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_FACE_DEC_MODE_EN&lt;br /&gt;
|0xB0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_GLOVE_MODE_EN&lt;br /&gt;
|0xC0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_COVER_MODE_EN&lt;br /&gt;
|0xC1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_CHARGER_MODE_EN&lt;br /&gt;
|0x8B&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_GESTURE_EN&lt;br /&gt;
|0xD0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_GESTURE_OUTPUT_ADDRESS&lt;br /&gt;
|0xD3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_ESD_SATURATE 0xED&lt;br /&gt;
|0xED&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''WARNING : ''' &amp;lt;del&amp;gt;Writing the SLEEP command (write 0x05 in HYN_REG_POWER_MODE) seems to freeze the controller (it returns only static values) until the battery is totally drained and the whole system reset. Analysis and debugging is more than welcome!&amp;lt;/del&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Accelerometer===&lt;br /&gt;
The on board accelerometer is Bosch BMA421, connected to the I2C bus.&lt;br /&gt;
&lt;br /&gt;
==== Pins ====&lt;br /&gt;
&lt;br /&gt;
* P0.06 : I²C SDA&lt;br /&gt;
* P0.07 : I²C SCL&lt;br /&gt;
* P0.08 : Interrupt&lt;br /&gt;
&lt;br /&gt;
I2C Device address : 0x18&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Datasheets and Schematics ==&lt;br /&gt;
&lt;br /&gt;
=== Schematics ===&lt;br /&gt;
* [https://files.pine64.org/doc/PineTime/PineTime%20Schematic-V1.0a-20191103.pdf PineTime Schematic ver1.0a]&lt;br /&gt;
* [https://files.pine64.org/doc/PineTime/PineTime%20Port%20Assignment%20rev1.0.pdf PineTime GPIO Port Assignment ver1.0]&lt;br /&gt;
&lt;br /&gt;
Note: The part number for the SPI FLASH in the schematic diagram is not correct, the PineTime features a larger external FLASH device, see below.&lt;br /&gt;
&lt;br /&gt;
=== Chip Datasheets ===&lt;br /&gt;
* NORDIC nRF52832 information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinetime/nRF52832%20product%20brief.pdf nRF52832 Product Brief]&lt;br /&gt;
** [https://infocenter.nordicsemi.com/pdf/nRF52832_PS_v1.1.pdf nRF52832 Product Specification v1.1]&lt;br /&gt;
* ARMv7-M information:&lt;br /&gt;
** [https://static.docs.arm.com/ddi0403/eb/DDI0403E_B_armv7m_arm.pdf ARMv7-M Architecture Reference Manual]&lt;br /&gt;
&lt;br /&gt;
=== Component Datasheets ===&lt;br /&gt;
* PMU (Power Management Unit) information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinetime/SGM40561.pdf SGMicro SGM40561 Single Cell Charger Datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinetime/SGMICRO-SGM2036.pdf SGMicro SGM2036 3.3V Low Power Low Dropout RF Linear Regulator Datasheet]&lt;br /&gt;
* SPI Flash information:&lt;br /&gt;
** [https://www.elnec.com/en/device/XTX/XT25F32B+%28QuadSPI%29+%5BSOP8-200%5D/ XTX XT25F32B 32Mb(4MB) SPI NOR Flash] (data sheets for this part are hard to find but it acts similar to other QuadSPI SPI NOR Flash such as [https://www.macronix.com/Lists/Datasheet/Attachments/7426/MX25L3233F,%203V,%2032Mb,%20v1.6.pdf Macronix 32Mb(4MB) SPI NOR Flash])&lt;br /&gt;
** [https://datasheet.lcsc.com/szlcsc/2005251035_XTX-XT25F32BSOIGU-S_C558851.pdf XTX XT25F32B]&lt;br /&gt;
** IDs for XT25F32B are: manufacturer (0x0b), device (0x15), memory type (0x40), density (0x16)&lt;br /&gt;
* LCD Panel:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinetime/PineTime%20LCD%20Panel.jpg 1.3&amp;quot; 240x240 IPS LCD Panel Specification for PineTime]&lt;br /&gt;
** [https://wiki.pine64.org/images/5/54/ST7789V_v1.6.pdf 11.6&amp;quot; Sitronix LCD Driver/Controller Datasheet]&lt;br /&gt;
* Touchpad information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinetime/PineTime%20Touch%20Panel.jpg Touchpad Specification for PineTimel]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinetime/CST816S数据手册V1.1.pdf 11.6&amp;quot; Hynitron CST816S Capacitive Touch Controller Datasheet in Chinese]&lt;br /&gt;
** [https://wiki.pine64.org/images/2/2f/CST816S.zip Touch Controller Datasheet en]&lt;br /&gt;
* Sensor:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinetime/BST-BMA421-FL000.pdf BOSCH BMA421 Triaxial VAcceleration Sensor Product Brief]&lt;br /&gt;
** [https://wiki.pine64.org/images/c/cc/Bst-bma400-ds000.pdf BOSCH BMA400 3-axes ultra-low power accelerometer datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinetime/HRS3300%20Heart%20Rate%20Sensor.pdf TianYiHeXin HRS3300 PPG Heart Rate Sensor Data Sheet]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Community case design ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.thingiverse.com/thing:4172849 PineTime Smart Watch case by dara0s at thingiverse]&lt;br /&gt;
* [https://www.thingiverse.com/thing:4651462 PineTime dev kit back fix by joaquimorg at thingiverse]&lt;br /&gt;
* [https://www.thingiverse.com/thing:4763267 PineTime dev kit charging holder v4 by zevix81 at thingiverse]&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineTime&amp;diff=10004</id>
		<title>PineTime</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineTime&amp;diff=10004"/>
		<updated>2021-04-22T19:05:21Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Frequently asked questions ==&lt;br /&gt;
&lt;br /&gt;
'''Read these first!'''&lt;br /&gt;
&lt;br /&gt;
* [[PineTime FAQ| Frequently Asked Questions about the devkit]]&lt;br /&gt;
* [[Reprogramming the PineTime|Reprogramming the PineTime (development kit)]]&lt;br /&gt;
&lt;br /&gt;
== Default OS ==&lt;br /&gt;
&lt;br /&gt;
The current default operating system on the PineTime is called [[InfiniTime]], you can find more information about the firmware on its GitHub page. First devkits shipped with a proprietary custom firmware.&lt;br /&gt;
&lt;br /&gt;
You can find a list of available firmware and other software here: [[PineTime Development]]&lt;br /&gt;
&lt;br /&gt;
== Short overview ==&lt;br /&gt;
'''Dimensions:''' 37.5 x 40 x 11mm &amp;lt;br&amp;gt;&lt;br /&gt;
'''Weight:''' 38 grams &amp;lt;br&amp;gt;&lt;br /&gt;
'''IP Rating:''' IP67 (waterproof to 1 meter (sealed edition!)) &amp;lt;br&amp;gt;&lt;br /&gt;
'''Display:'''&lt;br /&gt;
: '''Size:''' 1.3 inches (33mm) diagonal&lt;br /&gt;
: '''Type:''' IPS capacitive touchscreen, RGB 65K colors&lt;br /&gt;
: '''Display Controller:''' ST7789&lt;br /&gt;
: '''Resolution:''' 240x240 pixels &amp;lt;br&amp;gt;&lt;br /&gt;
'''System on Chip:''' Nordic Semiconductor nRF52832 &amp;lt;br&amp;gt;&lt;br /&gt;
'''Flash:''' 512KB with additional 4MB SPI NOR &amp;lt;br&amp;gt;&lt;br /&gt;
'''RAM:''' 64KB &amp;lt;br&amp;gt;&lt;br /&gt;
'''Bluetooth:''' [[PineTime_Bluetooth|5.0 (including Bluetooth Low Energy)]] &amp;lt;br&amp;gt;&lt;br /&gt;
'''Sensors:''' Accelerometer, Heart rate sensor &amp;lt;br&amp;gt;&lt;br /&gt;
'''Feedback:''' Vibration motor &amp;lt;br&amp;gt;&lt;br /&gt;
'''Battery:''' 170-180mAh LiPo&lt;br /&gt;
&lt;br /&gt;
= Community =&lt;br /&gt;
&lt;br /&gt;
== Forum ==&lt;br /&gt;
* [https://forum.pine64.org/forumdisplay.php?fid=134 PineTime forum]&lt;br /&gt;
&lt;br /&gt;
== Chat ==&lt;br /&gt;
* [https://app.element.io/#/room/#pinetime:matrix.org Matrix Channel] (No login required to read)&lt;br /&gt;
* IRC Server: [ircs://irc.pine64.org#pinetime irc.pine64.org] Channel: PineTime&lt;br /&gt;
* [https://t.me/pinetime Telegram group]&lt;br /&gt;
* [https://discordapp.com/invite/DgB7kzr Discord server invite link]&lt;br /&gt;
&lt;br /&gt;
=== Developers and coding ===&lt;br /&gt;
* [https://app.element.io/#/room/#pinetime-dev:matrix.org Matrix Channel] (No login required to read)&lt;br /&gt;
* [https://t.me/pinetime_dev Telegram group]&lt;br /&gt;
* [https://discordapp.com/invite/DgB7kzr Discord server invite link]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Development efforts ==&lt;br /&gt;
&lt;br /&gt;
To read more about development on the PineTime, the projects available and more technical details, check out [[PineTime Development]]&lt;br /&gt;
&lt;br /&gt;
== Useful articles and blog posts == &lt;br /&gt;
&lt;br /&gt;
If you want to dive in to the ecosystem, here's a short list of various articles and blog posts that can help you set up your soft- or hardware development environment.&lt;br /&gt;
&lt;br /&gt;
* [https://www.ncartron.org/one-week-with-my-pinetime---a-feedback.html Using the PineTime in production (January 2021)]&lt;br /&gt;
&lt;br /&gt;
* [https://medium.com/swlh/sneak-peek-of-pinetime-smart-watch-and-why-its-perfect-for-teaching-iot-81b74161c159 Sneak Peek of PineTime Smart Watch… And why it’s perfect for teaching IoT]&lt;br /&gt;
&lt;br /&gt;
* [https://medium.com/@ly.lee/building-a-rust-driver-for-pinetimes-touch-controller-cbc1a5d5d3e9 Building a Rust Driver for PineTime’s Touch Controller]&lt;br /&gt;
&lt;br /&gt;
* [https://medium.com/@ly.lee/porting-druid-rust-widgets-to-pinetime-smart-watch-7e1d5a5d977a Porting (druid) Rust Widgets to PineTime Smart Watch]&lt;br /&gt;
&lt;br /&gt;
* [https://medium.com/@ly.lee/optimising-pinetimes-display-driver-with-rust-and-mynewt-3ba269ea2f5c Optimising PineTime’s Display Driver with Rust and Mynewt]&lt;br /&gt;
&lt;br /&gt;
* [https://electronut.in/getting-started-with-zephyr-rtos-on-nordic-nrf52832-hackable/ Getting Started with Zephyr RTOS on Nordic nRF52832 hackaBLE]&lt;br /&gt;
&lt;br /&gt;
* [https://blog.aegrel.ee/absniffer-cmsis-dap-sniffer.html Removing the lock and installing another firmware on the nRF52832 using CMSIS-DAP dongle on Linux]&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/JF002/nrf52-baseproject/wiki/Build,-program-and-debug-NRF52-project-with-JLink,-CMake-and-CLion Build, program and debug NRF52 project with JLink, CMake and CLion]&lt;br /&gt;
&lt;br /&gt;
* [https://www.nrbtech.io/blog/2020/1/4/using-clion-for-nordic-nrf52-projects Using CLion for Nordic nRF52 projects]&lt;br /&gt;
&lt;br /&gt;
* [https://dev.to/aaronc81/flashing-your-pinetime-using-an-st-link-and-openocd-54dd Flashing your PineTime using an ST-Link and OpenOCD]&lt;br /&gt;
&lt;br /&gt;
* [https://zephyrlabs.github.io/Watchfaces/ Zephyrlabs: just a bunch of watchfaces made for the pinetime]&lt;br /&gt;
&lt;br /&gt;
*[https://pankajraghav.com/2021/04/03/PINETIME-STOPCLOCK.html Creating a stopwatch in Pinetime (with Infinitime)]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
=== Display ===&lt;br /&gt;
&lt;br /&gt;
Note: The factory-default software on the PineTime does not auto-detect the display being disconnected when it has already booted. That can cause garbled output, to fix it just restart the PineTime.&lt;br /&gt;
&lt;br /&gt;
The display is driven using the ST7789 display controller. Use the following pins to drive the screen:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PineTime pin&lt;br /&gt;
! ST7789 pin&lt;br /&gt;
|-&lt;br /&gt;
| LCD_SCK (P0.02)&lt;br /&gt;
| SPI clock&lt;br /&gt;
|-&lt;br /&gt;
| LCD_SDI (P0.03)&lt;br /&gt;
| SPI MOSI&lt;br /&gt;
|-&lt;br /&gt;
| LCD_RS (P0.18)&lt;br /&gt;
| Command/Data pin (CD)&lt;br /&gt;
|-&lt;br /&gt;
| LCD_CS (P0.25)&lt;br /&gt;
| Chip select&lt;br /&gt;
|-&lt;br /&gt;
| LCD_RESET (P0.26)&lt;br /&gt;
| Display reset&lt;br /&gt;
|-&lt;br /&gt;
| LCD_BACKLIGHT_{LOW,MID,HIGH}&lt;br /&gt;
| Backlight (active low)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
&lt;br /&gt;
* Chip select must be held low while driving the display. It must be high when using other SPI devices on the same bus (such as external flash storage) so that the display controller won't respond to the wrong commands.&lt;br /&gt;
* SPI must be used in mode 3. Mode 0 (the default) won't work.&lt;br /&gt;
* LCD_DISPLAY_* is used to enable the backlight. Set at least one to low to see anything on the screen.&lt;br /&gt;
* Use SPI at 8MHz (the fastest clock available on the nRF52832) because otherwise refreshing will be super slow.&lt;br /&gt;
&lt;br /&gt;
'''References''':&lt;br /&gt;
&lt;br /&gt;
[https://github.com/adafruit/Adafruit-ST7735-Library/ Adafruit ST7789 driver in cpp]&lt;br /&gt;
&lt;br /&gt;
=== Battery measurement ===&lt;br /&gt;
&lt;br /&gt;
Reading whether the PineTime has power attached is easy: simply read the charge indication pin (P0.12). When it is high it is running on battery, when it is low it is charging.&lt;br /&gt;
&lt;br /&gt;
Reading the battery voltage is a bit harder. For that you can use the battery voltage pin on P0.31 (AIN7). The returned value is 12 bits, which means it is 0..4095. You can get the measured voltage with the following formula, assuming a reference voltage of 3.3V (this is configurable in the ADC):&lt;br /&gt;
&lt;br /&gt;
 adcVoltage = adcValue / (4095 / 3.3)&lt;br /&gt;
&lt;br /&gt;
The measured voltage is actually half of the actual battery voltage, because the ADC is connected between a voltage divider where both resistors are 1MΩ. This can be corrected by multiplying the value:&lt;br /&gt;
&lt;br /&gt;
 batteryVoltage = adcValue * 2 / (4095 / 3.3)&lt;br /&gt;
&lt;br /&gt;
It's often better to avoid floating point values on embedded systems and in this case there is no reason to use float at all, we can just represent the value in millivolts. Therefore the formula can be simplified to:&lt;br /&gt;
&lt;br /&gt;
 batteryVoltage = adcValue * 2000 / (4095 / 3.3)&lt;br /&gt;
 batteryVoltage = adcValue * 2000 / 1241&lt;br /&gt;
&lt;br /&gt;
Converting this voltage to an estimated capacity in percent requires a more complicated algorithm, because Lithium-ion batteries have a non-linear discharge curve.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Button ===&lt;br /&gt;
&lt;br /&gt;
The button on the side of the PineTime is disabled by default. To enable it, drive the button out pin (P0.15) high.&lt;br /&gt;
&lt;br /&gt;
While enabled, the button in pin (P0.13) will be high when the button is pressed, and low when it is not pressed.&lt;br /&gt;
&lt;br /&gt;
=== Touch panel ===&lt;br /&gt;
&lt;br /&gt;
The touch panel is controlled by a Hynitron CST816S chips. Unfortunately, there is not much information about this chip on the internet apart from the datasheet below and a [https://github.com/lupyuen/hynitron_i2c_cst0xxse/ reference driver]. This is enough to implement a basic driver, but crucial information needed to implement advanced functionalities are missing (I²C protocol and registers, timings, power modes,...).&lt;br /&gt;
&lt;br /&gt;
==== Pins ====&lt;br /&gt;
&lt;br /&gt;
* P0.10 : Reset&lt;br /&gt;
* P0.28 : Interrupt (signal to the CPU when a touch event is detected)&lt;br /&gt;
* P0.06 : I²C SDA&lt;br /&gt;
* P0.07 : I²C SCL&lt;br /&gt;
&lt;br /&gt;
==== I²C ====&lt;br /&gt;
&lt;br /&gt;
* Device address : 0x15&lt;br /&gt;
* Frequency : from 10Khz to 400Khz&lt;br /&gt;
&lt;br /&gt;
'''NOTE: ''' The controller go to sleep when no event is detected. In sleep mode, the controller does not communicate on the I²C bus (it appears disconnected). So, for the communication to work, you need to tap on the screen so that the chip wakes-up.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: ''' The I²C bus, also known as TWI bus has known issues, make sure to write your TWI driver with timeouts.&lt;br /&gt;
&lt;br /&gt;
==== Touch events ====&lt;br /&gt;
&lt;br /&gt;
Touch information is available from the 63 first registers of the controller. Remember: the device is in sleep mode when no touch event is detected. It means that you can read the register only when the touch controller detected an event. You can use the ''Interrupt'' pin to detect such event in the software. &lt;br /&gt;
&lt;br /&gt;
These 63 bytes contain up to 10 touch point (X, Y, event type, pressure,...) : &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Bit7&lt;br /&gt;
! Bit6&lt;br /&gt;
! Bit5&lt;br /&gt;
! Bit4&lt;br /&gt;
! Bit3&lt;br /&gt;
! Bit2&lt;br /&gt;
! Bit1&lt;br /&gt;
! Bit0&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|colspan=&amp;quot;8&amp;quot;|?&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|colspan=&amp;quot;8&amp;quot;|GestureID : (Gesture code ,&lt;br /&gt;
&lt;br /&gt;
0x00: no gesture,&lt;br /&gt;
&lt;br /&gt;
0x01: Slide down,&lt;br /&gt;
&lt;br /&gt;
0x02: Slide up,&lt;br /&gt;
&lt;br /&gt;
0x03: Slide left,&lt;br /&gt;
&lt;br /&gt;
0x04: Slide right,&lt;br /&gt;
&lt;br /&gt;
0x05: Single click,&lt;br /&gt;
&lt;br /&gt;
0x0B: Double click,&lt;br /&gt;
&lt;br /&gt;
0x0C: Long press) &lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;|? &lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;|Number of touch points &lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|Event (0 = Down, 1 = Up, 2 = Contact)&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|?&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;|X (MSB) coordinate&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|colspan=&amp;quot;8&amp;quot;|X (LSB) coordinate&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|?&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|Touch ID&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;|Y (MSB) coordinate&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|colspan=&amp;quot;8&amp;quot;|Y (LSB) coordinate&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|colspan=&amp;quot;8&amp;quot;|Pressure (?)&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|colspan=&amp;quot;8&amp;quot;|Miscellaneous (?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bytes 3 to 8 are repeated 10 times (10*6 + 3 = 63 bytes).&lt;br /&gt;
&lt;br /&gt;
'''NOTES'''&lt;br /&gt;
&lt;br /&gt;
* The touch controller seems to report only 1 touch point&lt;br /&gt;
* Fields X, Y, Number of touch points and touch ID are updated. The others are always 0.&lt;br /&gt;
&lt;br /&gt;
==== Registers ====&lt;br /&gt;
&lt;br /&gt;
The reference driver specifies some registers and value, but there is no information about them: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
!Register&lt;br /&gt;
!Address&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_INT_CNT&lt;br /&gt;
|0x8F&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_FLOW_WORK_CNT&lt;br /&gt;
|0x91&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_WORKMODE &lt;br /&gt;
|0x00&lt;br /&gt;
|0 = WORK, 0x40 = FACTORY&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_CHIP_ID&lt;br /&gt;
|0xA3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_CHIP_ID2&lt;br /&gt;
|0x9F&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_POWER_MODE&lt;br /&gt;
|0xA5&lt;br /&gt;
|0x03 = SLEEP (reset the touchpanel using the reset pin before using this register : pin_low, delay 5ms, pin_high, delay 50ms then write 3 to register 0xA5)&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_FW_VER&lt;br /&gt;
|0xA6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_VENDOR_ID&lt;br /&gt;
|0xA8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_LCD_BUSY_NUM&lt;br /&gt;
|0xAB&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_FACE_DEC_MODE_EN&lt;br /&gt;
|0xB0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_GLOVE_MODE_EN&lt;br /&gt;
|0xC0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_COVER_MODE_EN&lt;br /&gt;
|0xC1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_CHARGER_MODE_EN&lt;br /&gt;
|0x8B&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_GESTURE_EN&lt;br /&gt;
|0xD0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_GESTURE_OUTPUT_ADDRESS&lt;br /&gt;
|0xD3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_ESD_SATURATE 0xED&lt;br /&gt;
|0xED&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''WARNING : ''' &amp;lt;del&amp;gt;Writing the SLEEP command (write 0x05 in HYN_REG_POWER_MODE) seems to freeze the controller (it returns only static values) until the battery is totally drained and the whole system reset. Analysis and debugging is more than welcome!&amp;lt;/del&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Accelerometer===&lt;br /&gt;
The on board accelerometer is Bosch BMA421, connected to the I2C bus.&lt;br /&gt;
&lt;br /&gt;
==== Pins ====&lt;br /&gt;
&lt;br /&gt;
* P0.06 : I²C SDA&lt;br /&gt;
* P0.07 : I²C SCL&lt;br /&gt;
* P0.08 : Interrupt&lt;br /&gt;
&lt;br /&gt;
I2C Device address : 0x18&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Datasheets and Schematics ==&lt;br /&gt;
&lt;br /&gt;
=== Schematics ===&lt;br /&gt;
* [https://files.pine64.org/doc/PineTime/PineTime%20Schematic-V1.0a-20191103.pdf PineTime Schematic ver1.0a]&lt;br /&gt;
* [https://files.pine64.org/doc/PineTime/PineTime%20Port%20Assignment%20rev1.0.pdf PineTime GPIO Port Assignment ver1.0]&lt;br /&gt;
&lt;br /&gt;
Note: The part number for the SPI FLASH in the schematic diagram is not correct, the PineTime features a larger external FLASH device, see below.&lt;br /&gt;
&lt;br /&gt;
=== Chip Datasheets ===&lt;br /&gt;
* NORDIC nRF52832 information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinetime/nRF52832%20product%20brief.pdf nRF52832 Product Brief]&lt;br /&gt;
** [https://infocenter.nordicsemi.com/pdf/nRF52832_PS_v1.1.pdf nRF52832 Product Specification v1.1]&lt;br /&gt;
* ARMv7-M information:&lt;br /&gt;
** [https://static.docs.arm.com/ddi0403/eb/DDI0403E_B_armv7m_arm.pdf ARMv7-M Architecture Reference Manual]&lt;br /&gt;
&lt;br /&gt;
=== Component Datasheets ===&lt;br /&gt;
* PMU (Power Management Unit) information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinetime/SGM40561.pdf SGMicro SGM40561 Single Cell Charger Datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinetime/SGMICRO-SGM2036.pdf SGMicro SGM2036 3.3V Low Power Low Dropout RF Linear Regulator Datasheet]&lt;br /&gt;
* SPI Flash information:&lt;br /&gt;
** [https://www.elnec.com/en/device/XTX/XT25F32B+%28QuadSPI%29+%5BSOP8-200%5D/ XTX XT25F32B 32Mb(4MB) SPI NOR Flash] (data sheets for this part are hard to find but it acts similar to other QuadSPI SPI NOR Flash such as [https://www.macronix.com/Lists/Datasheet/Attachments/7426/MX25L3233F,%203V,%2032Mb,%20v1.6.pdf Macronix 32Mb(4MB) SPI NOR Flash])&lt;br /&gt;
** [https://datasheet.lcsc.com/szlcsc/2005251035_XTX-XT25F32BSOIGU-S_C558851.pdf XTX XT25F32B]&lt;br /&gt;
** IDs for XT25F32B are: manufacturer (0x0b), device (0x15), memory type (0x40), density (0x16)&lt;br /&gt;
* LCD Panel:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinetime/PineTime%20LCD%20Panel.jpg 1.3&amp;quot; 240x240 IPS LCD Panel Specification for PineTime]&lt;br /&gt;
** [https://wiki.pine64.org/images/5/54/ST7789V_v1.6.pdf 11.6&amp;quot; Sitronix LCD Driver/Controller Datasheet]&lt;br /&gt;
* Touchpad information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinetime/PineTime%20Touch%20Panel.jpg Touchpad Specification for PineTimel]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinetime/CST816S数据手册V1.1.pdf 11.6&amp;quot; Hynitron CST816S Capacitive Touch Controller Datasheet in Chinese]&lt;br /&gt;
** [https://wiki.pine64.org/images/2/2f/CST816S.zip Touch Controller Datasheet en]&lt;br /&gt;
* Sensor:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinetime/BST-BMA421-FL000.pdf BOSCH BMA421 Triaxial VAcceleration Sensor Product Brief]&lt;br /&gt;
** [https://wiki.pine64.org/images/c/cc/Bst-bma400-ds000.pdf BOSCH BMA400 3-axes ultra-low power accelerometer datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinetime/HRS3300%20Heart%20Rate%20Sensor.pdf TianYiHeXin HRS3300 PPG Heart Rate Sensor Data Sheet]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Community case design ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.thingiverse.com/thing:4172849 PineTime Smart Watch case by dara0s at thingiverse]&lt;br /&gt;
* [https://www.thingiverse.com/thing:4651462 PineTime dev kit back fix by joaquimorg at thingiverse]&lt;br /&gt;
* [https://www.thingiverse.com/thing:4763267 PineTime dev kit charging holder v4 by zevix81 at thingiverse]&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineTime&amp;diff=10003</id>
		<title>PineTime</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineTime&amp;diff=10003"/>
		<updated>2021-04-22T19:03:32Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Frequently asked questions ==&lt;br /&gt;
&lt;br /&gt;
'''Read these first!'''&lt;br /&gt;
&lt;br /&gt;
* [[PineTime FAQ| Frequently Asked Questions about the devkit]]&lt;br /&gt;
* [[Reprogramming the PineTime|Reprogramming the PineTime (development kit)]]&lt;br /&gt;
&lt;br /&gt;
== Default OS ==&lt;br /&gt;
&lt;br /&gt;
The current default operating system on the PineTime is called [[InfiniTime]], you can find more information about the firmware on its GitHub page. First devkits shipped with a proprietary custom firmware.&lt;br /&gt;
&lt;br /&gt;
You can find a list of available firmware and other software here: [[PineTime Development]]&lt;br /&gt;
&lt;br /&gt;
== Short overview ==&lt;br /&gt;
'''Dimensions:''' 37.5 x 40 x 11mm &amp;lt;br&amp;gt;&lt;br /&gt;
'''Weight:''' 38 grams &amp;lt;br&amp;gt;&lt;br /&gt;
'''IP Rating:''' IP67 (waterproof to 1 meter (sealed edition!)) &amp;lt;br&amp;gt;&lt;br /&gt;
'''Display:'''&lt;br /&gt;
: '''Size:''' 1.3 inches (33mm) diagonal&lt;br /&gt;
: '''Type:''' IPS capacitive touchscreen, RGB 65K colors&lt;br /&gt;
: '''Display Controller:''' ST7789&lt;br /&gt;
: '''Resolution:''' 240x240 pixels &amp;lt;br&amp;gt;&lt;br /&gt;
'''System on Chip:''' Nordic Semiconductor nRF52832 &amp;lt;br&amp;gt;&lt;br /&gt;
'''Flash:''' 512KB with additional 4MB SPI NOR &amp;lt;br&amp;gt;&lt;br /&gt;
'''RAM:''' 64KB &amp;lt;br&amp;gt;&lt;br /&gt;
'''Bluetooth:''' [[PineTime_Bluetooth|5.0 (including Bluetooth Low Energy)]] &amp;lt;br&amp;gt;&lt;br /&gt;
'''Sensors:''' Accelerometer, Heart rate sensor &amp;lt;br&amp;gt;&lt;br /&gt;
'''Feedback:''' Vibration motor &amp;lt;br&amp;gt;&lt;br /&gt;
'''Battery:''' 170-180mAh LiPo&lt;br /&gt;
&lt;br /&gt;
= Community =&lt;br /&gt;
&lt;br /&gt;
== Forum ==&lt;br /&gt;
* [https://forum.pine64.org/forumdisplay.php?fid=134 PineTime forum]&lt;br /&gt;
&lt;br /&gt;
== Chat ==&lt;br /&gt;
* [https://app.element.io/#/room/#pinetime:matrix.org Matrix Channel] (No login required to read)&lt;br /&gt;
* IRC Server: [ircs://irc.pine64.org#pinetime irc.pine64.org] Channel: PineTime&lt;br /&gt;
* [https://t.me/pinetime Telegram group]&lt;br /&gt;
* [https://discordapp.com/invite/DgB7kzr Discord server invite link]&lt;br /&gt;
&lt;br /&gt;
=== Developers and coding ===&lt;br /&gt;
* [https://app.element.io/#/room/#pinetime-dev:matrix.org Matrix Channel] (No login required to read)&lt;br /&gt;
* [https://t.me/pinetime_dev Telegram group]&lt;br /&gt;
* [https://discordapp.com/invite/DgB7kzr Discord server invite link]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Development efforts ==&lt;br /&gt;
&lt;br /&gt;
To read more about development on the PineTime, the projects available and more technical details, check out [[PineTime Development]]&lt;br /&gt;
&lt;br /&gt;
== Useful articles and blog posts == &lt;br /&gt;
&lt;br /&gt;
If you want to dive in to the ecosystem, here's a short list of various articles and blog posts that can help you set up your soft- or hardware development environment.&lt;br /&gt;
&lt;br /&gt;
* [https://www.ncartron.org/one-week-with-my-pinetime---a-feedback.html Using the PineTime in production (January 2021)]&lt;br /&gt;
&lt;br /&gt;
* [https://medium.com/swlh/sneak-peek-of-pinetime-smart-watch-and-why-its-perfect-for-teaching-iot-81b74161c159 Sneak Peek of PineTime Smart Watch… And why it’s perfect for teaching IoT]&lt;br /&gt;
&lt;br /&gt;
* [https://medium.com/@ly.lee/building-a-rust-driver-for-pinetimes-touch-controller-cbc1a5d5d3e9 Building a Rust Driver for PineTime’s Touch Controller]&lt;br /&gt;
&lt;br /&gt;
* [https://medium.com/@ly.lee/porting-druid-rust-widgets-to-pinetime-smart-watch-7e1d5a5d977a Porting (druid) Rust Widgets to PineTime Smart Watch]&lt;br /&gt;
&lt;br /&gt;
* [https://medium.com/@ly.lee/optimising-pinetimes-display-driver-with-rust-and-mynewt-3ba269ea2f5c Optimising PineTime’s Display Driver with Rust and Mynewt]&lt;br /&gt;
&lt;br /&gt;
* [https://electronut.in/getting-started-with-zephyr-rtos-on-nordic-nrf52832-hackable/ Getting Started with Zephyr RTOS on Nordic nRF52832 hackaBLE]&lt;br /&gt;
&lt;br /&gt;
* [https://blog.aegrel.ee/absniffer-cmsis-dap-sniffer.html Removing the lock and installing another firmware on the nRF52832 using CMSIS-DAP dongle on Linux]&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/JF002/nrf52-baseproject/wiki/Build,-program-and-debug-NRF52-project-with-JLink,-CMake-and-CLion Build, program and debug NRF52 project with JLink, CMake and CLion]&lt;br /&gt;
&lt;br /&gt;
* [https://www.nrbtech.io/blog/2020/1/4/using-clion-for-nordic-nrf52-projects Using CLion for Nordic nRF52 projects]&lt;br /&gt;
&lt;br /&gt;
* [https://dev.to/aaronc81/flashing-your-pinetime-using-an-st-link-and-openocd-54dd Flashing your PineTime using an ST-Link and OpenOCD]&lt;br /&gt;
&lt;br /&gt;
* [https://zephyrlabs.github.io/Watchfaces/ Zephyrlabs: just a bunch of watchfaces made for the pinetime]&lt;br /&gt;
&lt;br /&gt;
*[https://pankajraghav.com/2021/04/03/PINETIME-STOPCLOCK.html Creating a stopwatch in Pinetime (with Infinitime)]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
=== Display ===&lt;br /&gt;
&lt;br /&gt;
Note: The factory-default software on the PineTime does not auto-detect the display being disconnected when it has already booted. That can cause garbled output, to fix it just restart the PineTime.&lt;br /&gt;
&lt;br /&gt;
The display is driven using the ST7789 display controller. Use the following pins to drive the screen:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PineTime pin&lt;br /&gt;
! ST7789 pin&lt;br /&gt;
|-&lt;br /&gt;
| LCD_SCK (P0.02)&lt;br /&gt;
| SPI clock&lt;br /&gt;
|-&lt;br /&gt;
| LCD_SDI (P0.03)&lt;br /&gt;
| SPI MOSI&lt;br /&gt;
|-&lt;br /&gt;
| LCD_RS (P0.18)&lt;br /&gt;
| Command/Data pin (CD)&lt;br /&gt;
|-&lt;br /&gt;
| LCD_CS (P0.25)&lt;br /&gt;
| Chip select&lt;br /&gt;
|-&lt;br /&gt;
| LCD_RESET (P0.26)&lt;br /&gt;
| Display reset&lt;br /&gt;
|-&lt;br /&gt;
| LCD_BACKLIGHT_{LOW,MID,HIGH}&lt;br /&gt;
| Backlight (active low)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
&lt;br /&gt;
* Chip select must be held low while driving the display. It must be high when using other SPI devices on the same bus (such as external flash storage) so that the display controller won't respond to the wrong commands.&lt;br /&gt;
* SPI must be used in mode 3. Mode 0 (the default) won't work.&lt;br /&gt;
* LCD_DISPLAY_* is used to enable the backlight. Set at least one to low to see anything on the screen.&lt;br /&gt;
* Use SPI at 8MHz (the fastest clock available on the nRF52832) because otherwise refreshing will be super slow.&lt;br /&gt;
&lt;br /&gt;
'''References''':&lt;br /&gt;
&lt;br /&gt;
[https://github.com/adafruit/Adafruit-ST7735-Library/ Adafruit ST7789 driver in cpp]&lt;br /&gt;
&lt;br /&gt;
=== Battery measurement ===&lt;br /&gt;
&lt;br /&gt;
Reading whether the PineTime has power attached is easy: simply read the charge indication pin (P0.12). When it is high it is running on battery, when it is low it is charging.&lt;br /&gt;
&lt;br /&gt;
Reading the battery voltage is a bit harder. For that you can use the battery voltage pin on P0.31 (AIN7). The returned value is 12 bits, which means it is 0..4095. You can get the measured voltage with the following formula, assuming a reference voltage of 3.3V (this is configurable in the ADC):&lt;br /&gt;
&lt;br /&gt;
 adcVoltage = adcValue / (4095 / 3.3)&lt;br /&gt;
&lt;br /&gt;
The measured voltage is actually half of the actual battery voltage, because the ADC is connected between a voltage divider where both resistors are 1MΩ. This can be corrected by multiplying the value:&lt;br /&gt;
&lt;br /&gt;
 batteryVoltage = adcValue * 2 / (4095 / 3.3)&lt;br /&gt;
&lt;br /&gt;
It's often better to avoid floating point values on embedded systems and in this case there is no reason to use float at all, we can just represent the value in millivolts. Therefore the formula can be simplified to:&lt;br /&gt;
&lt;br /&gt;
 batteryVoltage = adcValue * 2000 / (4095 / 3.3)&lt;br /&gt;
 batteryVoltage = adcValue * 2000 / 1241&lt;br /&gt;
&lt;br /&gt;
Converting this voltage to an estimated capacity in percent requires a more complicated algorithm, because Lithium-ion batteries have a non-linear discharge curve.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Button ===&lt;br /&gt;
&lt;br /&gt;
The button on the side of the PineTime is disabled by default. To enable it, drive the button out pin (P0.15) high.&lt;br /&gt;
&lt;br /&gt;
While enabled, the button in pin (P0.13) will be high when the button is pressed, and low when it is not pressed.&lt;br /&gt;
&lt;br /&gt;
=== Touch panel ===&lt;br /&gt;
&lt;br /&gt;
The touch panel is controlled by a Hynitron CST816S chips. Unfortunately, there is not much information about this chip on the internet apart from the datasheet below and a [https://github.com/lupyuen/hynitron_i2c_cst0xxse/ reference driver]. This is enough to implement a basic driver, but crucial information needed to implement advanced functionalities are missing (I²C protocol and registers, timings, power modes,...).&lt;br /&gt;
&lt;br /&gt;
==== Pins ====&lt;br /&gt;
&lt;br /&gt;
* P0.10 : Reset&lt;br /&gt;
* P0.28 : Interrupt (signal to the CPU when a touch event is detected)&lt;br /&gt;
* P0.06 : I²C SDA&lt;br /&gt;
* P0.07 : I²C SCL&lt;br /&gt;
&lt;br /&gt;
==== I²C ====&lt;br /&gt;
&lt;br /&gt;
* Device address : 0x15&lt;br /&gt;
* Frequency : from 10Khz to 400Khz&lt;br /&gt;
&lt;br /&gt;
'''NOTE: ''' The controller go to sleep when no event is detected. In sleep mode, the controller does not communicate on the I²C bus (it appears disconnected). So, for the communication to work, you need to tap on the screen so that the chip wakes-up.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: ''' The I²C bus, also known as TWI bus has known issues, make sure to write your TWI driver with timeouts.&lt;br /&gt;
&lt;br /&gt;
==== Touch events ====&lt;br /&gt;
&lt;br /&gt;
Touch information is available from the 63 first registers of the controller. Remember: the device is in sleep mode when no touch event is detected. It means that you can read the register only when the touch controller detected an event. You can use the ''Interrupt'' pin to detect such event in the software. &lt;br /&gt;
&lt;br /&gt;
These 63 bytes contain up to 10 touch point (X, Y, event type, pressure,...) : &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte&lt;br /&gt;
! Bit7&lt;br /&gt;
! Bit6&lt;br /&gt;
! Bit5&lt;br /&gt;
! Bit4&lt;br /&gt;
! Bit3&lt;br /&gt;
! Bit2&lt;br /&gt;
! Bit1&lt;br /&gt;
! Bit0&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|colspan=&amp;quot;8&amp;quot;|?&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|colspan=&amp;quot;8&amp;quot;|GestureID : (Gesture code ,&lt;br /&gt;
&lt;br /&gt;
0x00: no gesture,&lt;br /&gt;
&lt;br /&gt;
0x01: Slide down,&lt;br /&gt;
&lt;br /&gt;
0x02: Slide up,&lt;br /&gt;
&lt;br /&gt;
0x03: Slide left,&lt;br /&gt;
&lt;br /&gt;
0x04: Slide right,&lt;br /&gt;
&lt;br /&gt;
0x05: Single click,&lt;br /&gt;
&lt;br /&gt;
0x0B: Double click,&lt;br /&gt;
&lt;br /&gt;
0x0C: Long press) &lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;|? &lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;|Number of touch points &lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|Event (0 = Down, 1 = Up, 2 = Contact)&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|?&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;|X (MSB) coordinate&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|colspan=&amp;quot;8&amp;quot;|X (LSB) coordinate&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|?&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|Touch ID&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;|Y (MSB) coordinate&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|colspan=&amp;quot;8&amp;quot;|Y (LSB) coordinate&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|colspan=&amp;quot;8&amp;quot;|Pressure (?)&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|colspan=&amp;quot;8&amp;quot;|Miscellaneous (?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bytes 3 to 8 are repeated 10 times (10*6 + 3 = 63 bytes).&lt;br /&gt;
&lt;br /&gt;
'''NOTES'''&lt;br /&gt;
&lt;br /&gt;
* The touch controller seems to report only 1 touch point&lt;br /&gt;
* Fields X, Y, Number of touch points and touch ID are updated. The others are always 0.&lt;br /&gt;
&lt;br /&gt;
==== Registers ====&lt;br /&gt;
&lt;br /&gt;
The reference driver specifies some registers and value, but there is no information about them: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
!Register&lt;br /&gt;
!Address&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_INT_CNT&lt;br /&gt;
|0x8F&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_FLOW_WORK_CNT&lt;br /&gt;
|0x91&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_WORKMODE &lt;br /&gt;
|0x00&lt;br /&gt;
|0 = WORK, 0x40 = FACTORY&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_CHIP_ID&lt;br /&gt;
|0xA3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_CHIP_ID2&lt;br /&gt;
|0x9F&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_POWER_MODE&lt;br /&gt;
|0xA5&lt;br /&gt;
|0x03 = SLEEP (reset the touchpanel using the reset pin before using this register : pin_low, delay 5ms, pin_high, delay 50ms then write 3 to register 0xA5)&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_FW_VER&lt;br /&gt;
|0xA6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_VENDOR_ID&lt;br /&gt;
|0xA8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_LCD_BUSY_NUM&lt;br /&gt;
|0xAB&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_FACE_DEC_MODE_EN&lt;br /&gt;
|0xB0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_GLOVE_MODE_EN&lt;br /&gt;
|0xC0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_COVER_MODE_EN&lt;br /&gt;
|0xC1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_CHARGER_MODE_EN&lt;br /&gt;
|0x8B&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_GESTURE_EN&lt;br /&gt;
|0xD0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_GESTURE_OUTPUT_ADDRESS&lt;br /&gt;
|0xD3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HYN_REG_ESD_SATURATE 0xED&lt;br /&gt;
|0xED&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''WARNING : ''' &amp;lt;del&amp;gt;Writing the SLEEP command (write 0x05 in HYN_REG_POWER_MODE) seems to freeze the controller (it returns only static values) until the battery is totally drained and the whole system reset. Analysis and debugging is more than welcome!&amp;lt;/del&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Accelerometer===&lt;br /&gt;
The on board accelerometer is Bosch BMA421, connected to the I2C bus.&lt;br /&gt;
&lt;br /&gt;
==== Pins ====&lt;br /&gt;
&lt;br /&gt;
* P0.06 : I²C SDA&lt;br /&gt;
* P0.07 : I²C SCL&lt;br /&gt;
* P0.08 : Interrupt&lt;br /&gt;
&lt;br /&gt;
I2C Device address : 0x18&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Datasheets and Schematics ==&lt;br /&gt;
&lt;br /&gt;
=== Schematics ===&lt;br /&gt;
* [https://files.pine64.org/doc/PineTime/PineTime%20Schematic-V1.0a-20191103.pdf PineTime Schematic ver1.0a]&lt;br /&gt;
* [https://files.pine64.org/doc/PineTime/PineTime%20Port%20Assignment%20rev1.0.pdf PineTime GPIO Port Assignment ver1.0]&lt;br /&gt;
&lt;br /&gt;
Note: The part number for the SPI FLASH in the schematic diagram is not correct, the PineTime features a larger external FLASH device, see below.&lt;br /&gt;
&lt;br /&gt;
=== Chip Datasheets ===&lt;br /&gt;
* NORDIC nRF52832 information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinetime/nRF52832%20product%20brief.pdf nRF52832 Product Brief]&lt;br /&gt;
** [https://infocenter.nordicsemi.com/pdf/nRF52832_PS_v1.1.pdf nRF52832 Product Specification v1.1]&lt;br /&gt;
* ARMv7-M information:&lt;br /&gt;
** [https://static.docs.arm.com/ddi0403/eb/DDI0403E_B_armv7m_arm.pdf ARMv7-M Architecture Reference Manual]&lt;br /&gt;
&lt;br /&gt;
=== Component Datasheets ===&lt;br /&gt;
* PMU (Power Management Unit) information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinetime/SGM40561.pdf SGMicro SGM40561 Single Cell Charger Datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinetime/SGMICRO-SGM2036.pdf SGMicro SGM2036 3.3V Low Power Low Dropout RF Linear Regulator Datasheet]&lt;br /&gt;
* SPI Flash information:&lt;br /&gt;
** [https://www.elnec.com/en/device/XTX/XT25F32B+%28QuadSPI%29+%5BSOP8-200%5D/ XTX XT25F32B 32Mb(4MB) SPI NOR Flash] (data sheets for this part are hard to find but it acts similar to other QuadSPI SPI NOR Flash such as [https://www.macronix.com/Lists/Datasheet/Attachments/7426/MX25L3233F,%203V,%2032Mb,%20v1.6.pdf Macronix 32Mb(4MB) SPI NOR Flash])&lt;br /&gt;
** [https://datasheet.lcsc.com/szlcsc/2005251035_XTX-XT25F32BSOIGU-S_C558851.pdf XTX XT25F32B]&lt;br /&gt;
** IDs for XT25F32B are: manufacturer (0x0b), device (0x15), memory type (0x40), density (0x16)&lt;br /&gt;
* LCD Panel:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinetime/PineTime%20LCD%20Panel.jpg 1.3&amp;quot; 240x240 IPS LCD Panel Specification for PineTime]&lt;br /&gt;
** [https://wiki.pine64.org/images/5/54/ST7789V_v1.6.pdf 11.6&amp;quot; Sitronix LCD Driver/Controller Datasheet]&lt;br /&gt;
* Touchpad information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinetime/PineTime%20Touch%20Panel.jpg Touchpad Specification for PineTimel]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinetime/CST816S数据手册V1.1.pdf 11.6&amp;quot; Hynitron CST816S Capacitive Touch Controller Datasheet in Chinese]&lt;br /&gt;
** [https://wiki.pine64.org/images/2/2f/CST816S.zip Touch Controller Datasheet en]&lt;br /&gt;
* Sensor:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinetime/BST-BMA421-FL000.pdf BOSCH BMA421 Triaxial VAcceleration Sensor Product Brief]&lt;br /&gt;
** [https://wiki.pine64.org/images/c/cc/Bst-bma400-ds000.pdf BOSCH BMA400 3-axes ultra-low power accelerometer datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinetime/HRS3300%20Heart%20Rate%20Sensor.pdf TianYiHeXin HRS3300 PPG Heart Rate Sensor Data Sheet]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Community case design ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.thingiverse.com/thing:4172849 PineTime Smart Watch case by dara0s at thingiverse]&lt;br /&gt;
* [https://www.thingiverse.com/thing:4651462 PineTime dev kit back fix by joaquimorg at thingiverse]&lt;br /&gt;
* [https://www.thingiverse.com/thing:4763267 PineTime dev kit charging holder v4 by zevix81 at thingiverse]&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineTime_Equivalents&amp;diff=10002</id>
		<title>PineTime Equivalents</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineTime_Equivalents&amp;diff=10002"/>
		<updated>2021-04-22T19:02:11Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains a list of PineTime hardware equivalents or very close clones. Primarily to keep track of which devices could possibly be &amp;quot;jailbroken&amp;quot; and run PineTime firmware.&lt;br /&gt;
&lt;br /&gt;
''Please add devices that use the same chipset to this list.''&lt;br /&gt;
&lt;br /&gt;
==== Kalakate ====&lt;br /&gt;
&lt;br /&gt;
Seems to be PineTime hardware, interesting GUI, seems DaFit-y&lt;br /&gt;
&lt;br /&gt;
* https://www.youtube.com/watch?v=1VdMxbOYxgA&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Colmi P8 ====&lt;br /&gt;
&lt;br /&gt;
A few firmware already support both the P8 and PineTime, the physical differences are minor - only a few MCU pins are mapped differently. There are a few open issues on InfiniTime's GitHub page to add support for this device.&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineTime_Equivalents&amp;diff=10001</id>
		<title>PineTime Equivalents</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineTime_Equivalents&amp;diff=10001"/>
		<updated>2021-04-22T19:02:04Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains a list of PineTime hardware equivalents or very close clones. Primarily to keep track of which devices could possibly be &amp;quot;jailbroken&amp;quot; and run PineTime firmware.&lt;br /&gt;
&lt;br /&gt;
Please add devices that use the same chipset to this list.&lt;br /&gt;
&lt;br /&gt;
==== Kalakate ====&lt;br /&gt;
&lt;br /&gt;
Seems to be PineTime hardware, interesting GUI, seems DaFit-y&lt;br /&gt;
&lt;br /&gt;
* https://www.youtube.com/watch?v=1VdMxbOYxgA&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Colmi P8 ====&lt;br /&gt;
&lt;br /&gt;
A few firmware already support both the P8 and PineTime, the physical differences are minor - only a few MCU pins are mapped differently. There are a few open issues on InfiniTime's GitHub page to add support for this device.&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineTime_FAQ&amp;diff=10000</id>
		<title>PineTime FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineTime_FAQ&amp;diff=10000"/>
		<updated>2021-04-22T19:01:06Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Does PineTime run Linux? ===&lt;br /&gt;
&lt;br /&gt;
No. [https://forum.pine64.org/showthread.php?tid=8112 Please read this forum article] for information about Linux on PineTime. Also check out the article [https://lupyuen.github.io/pinetime-rust-mynewt/articles/pinetime &amp;quot;PineTime doesn't run Linux... But that's OK!&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
=== Why are there two versions of the PineTime in the store? ===&lt;br /&gt;
&lt;br /&gt;
See the below question and answer.&lt;br /&gt;
&lt;br /&gt;
=== Why can I only buy the closed version in a 3-pack, and the open version per one? ===&lt;br /&gt;
&lt;br /&gt;
TL:DR: The unsealed PineTime is for development, the sealed one is for production use, because of firmware uploads. That is also why they were initially sold three in a pack.&lt;br /&gt;
&lt;br /&gt;
In the current situation in development there are some reasons to want to be sure you only experiment with an open device. If you install the wrong firmware, your device could be bricked, until you find a way to open it, which will likely damage the device.&lt;br /&gt;
The idea is that if you want to develop an application for the PineTime, you will be testing it out first, and only after you know for sure your new firmware is well tested, you will install it on sealed devices. If you are in the beta stage, having more than one PineTime is probably a good idea. So to prevent people from locking themselves out at the first test, it was decided to sell the closed version only as a pack of 3. Development can be done on an open device, so any issues can be easily handled.&lt;br /&gt;
&lt;br /&gt;
=== How long does it take to ship my PineTime? ===&lt;br /&gt;
&lt;br /&gt;
That depends on whether you chose for Standard or Express shipping. Standard shipping for the dev kit may take up to a few weeks.&lt;br /&gt;
&lt;br /&gt;
=== How do I install new software on PineTime? ===&lt;br /&gt;
&lt;br /&gt;
If you have a Sealed PineTime, flash only tested PineTime Firmware to your PineTime. If you flash unknown PineTime Firmware, your sealed PineTime may be bricked relatively permanently.&lt;br /&gt;
&lt;br /&gt;
There is a lot of different software for flashing. Check out [[PineTime Development]] page for a list of companion software.&lt;br /&gt;
&lt;br /&gt;
Also see [[Reprogramming_the_PineTime|this page to see various methods of reprogramming the devkit PineTime the wired way]].&lt;br /&gt;
&lt;br /&gt;
Remember to validate the firmware after flashing: Swipe up to show the menu, tap the checkmark icon, tap &amp;quot;Validate&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== My PineTime arrived, now what? ===&lt;br /&gt;
&lt;br /&gt;
You should start by testing out all the features of the watch, to make sure everything works. Power it on and check the display.&lt;br /&gt;
&lt;br /&gt;
PineTime is shipped with InfiniTime firmware. Press the watch button to show the clock, then swipe up on the touchscreen to reveal the menu.&lt;br /&gt;
&lt;br /&gt;
You probably now wish to update the bootloader and firmware.&lt;br /&gt;
&lt;br /&gt;
=== What's the OS that's preinstalled on the PineTime by default? ===&lt;br /&gt;
&lt;br /&gt;
PineTime ships with the open source [https://github.com/JF002/InfiniTime InfiniTime firmware].&lt;br /&gt;
&lt;br /&gt;
To support firmware update and rollback, PineTime includes the open source [https://lupyuen.github.io/pinetime-rust-mynewt/articles/mcuboot MCUBoot Bootloader].&lt;br /&gt;
&lt;br /&gt;
=== Can we use this OS or its source code? ===&lt;br /&gt;
&lt;br /&gt;
Yes, [https://github.com/JF002/InfiniTime InfiniTime] and the [https://lupyuen.github.io/pinetime-rust-mynewt/articles/mcuboot MCUBoot Bootloader] are open source.&lt;br /&gt;
&lt;br /&gt;
=== Why is the back exposed? Is it supposed to snap on? ===&lt;br /&gt;
&lt;br /&gt;
The back cover of the PineTime devkit is exposed so that you can flash and debug the device with the SWD pins. The main unit and cover does not snap (lock) together. If you want to attach the back cover anyway, you can use glue or tape.&lt;br /&gt;
&lt;br /&gt;
=== What hardware should I use to flash code to the PineTime? ===&lt;br /&gt;
&lt;br /&gt;
There are several ways you can do this, check out [[Reprogramming the PineTime]]&lt;br /&gt;
&lt;br /&gt;
=== How do I connect the PineTime to a programmer? ===&lt;br /&gt;
&lt;br /&gt;
Here's how: [[PineTime devkit wiring]]&lt;br /&gt;
&lt;br /&gt;
=== How do I set the time on PineTime? ===&lt;br /&gt;
&lt;br /&gt;
You can use either nRF Connect, custom GadgetBridge build or the proprietary Da Fit app. See [https://lupyuen.github.io/pinetime-rust-mynewt/articles/cloud#set-pinetime-date-and-time-with-nrf-connect &amp;quot;Set PineTime Date and Time with nRF Connect&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
You can also set the time using your PinePhone or other Linux-based Bluetooth LE capable device with the Bluez software installed. Install the bluez package and make sure your PineTime is running and awake with InfiniTime 0.7.1 or later.&lt;br /&gt;
&lt;br /&gt;
  $ bluetoothctl&lt;br /&gt;
  [ bluetooth ]# scan on&lt;br /&gt;
  ...&lt;br /&gt;
  [NEW] Device D7:03:FB:6E:31:B2 Pinetime-JF&lt;br /&gt;
  ...&lt;br /&gt;
  [bluetooth]# pair D7:03:FB:6E:31:B2&lt;br /&gt;
  Attempting to pair with D7:03:FB:6E:31:B2&lt;br /&gt;
  ...&lt;br /&gt;
  [NEW] Characteristic (Handle 0xfd80)&lt;br /&gt;
    /org/bluez/hci0/dev_D7_03_FB_6E_31_B2/service0015/char0016&lt;br /&gt;
    00002a2b-0000-1000-8000-00805f9b34fb&lt;br /&gt;
    Current Time&lt;br /&gt;
  ...&lt;br /&gt;
  [Pinetime-JF]# menu gatt&lt;br /&gt;
  ...&lt;br /&gt;
  [Pinetime-JF]# select-attribute /org/bluez/hci0/dev_D7_03_FB_6E_31_B2/service0015/char0016&lt;br /&gt;
  [Pinetime-JF:/service0015/char0016]# read&lt;br /&gt;
  Attempting to read /org/bluez/hci0/dev_D7_03_FB_6E_31_B2/service0015/char0016&lt;br /&gt;
  [CHG] Attribute /org/bluez/hci0/dev_D7_03_FB_6E_31_B2/service0015/char0016 Value:&lt;br /&gt;
    b2 07 01 01 00 04 15 00 00                       .........       &lt;br /&gt;
    b2 07 01 01 00 04 15 00 00                       .........&lt;br /&gt;
  [Pinetime-JF:/service0015/char0016]# write &amp;quot;0xe4 0x07 0x0c 0x1f 0x0e 0x02 0x00 0x00 0x00&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is the format for the current time as hex bytes:&lt;br /&gt;
  &amp;lt;lsb of year&amp;gt; &amp;lt;msb of year&amp;gt; &amp;lt;month (1-12)&amp;gt; &amp;lt;day (1-31)&amp;gt; &amp;lt;hour (0-23)&amp;gt; &amp;lt;minute (0-59)&amp;gt; &amp;lt;seconds (0-59)&amp;gt; &amp;lt;weekday (1-7 where 1=Monday)&amp;gt; &amp;lt;fractions (1/256th of second)&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Is there a standard agreed method of pushing OTA updates so that one could seal the PineTime dev kit nicely? ===&lt;br /&gt;
&lt;br /&gt;
InfiniTime supports firmware updates over Bluetooth LE with the nRF Connect mobile app. See [https://lupyuen.github.io/pinetime-rust-mynewt/articles/cloud#download-and-test-our-pinetime-firmware &amp;quot;Download and Test Our PineTime Firmware&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
=== My PineTime's screen shows garbage, how do I fix it? ===&lt;br /&gt;
&lt;br /&gt;
This is usually caused by unplugging the device after it has booted, it needs to be reinitialised. To do so just restart the watch by removing power to it.&lt;br /&gt;
&lt;br /&gt;
=== I have experience developing on Arduino. How does the PineTime compare? ===&lt;br /&gt;
&lt;br /&gt;
To learn programming on PineTime, [https://lupyuen.github.io/pinetime-rust-mynewt/articles/cloud check out this article]&lt;br /&gt;
&lt;br /&gt;
Arduino provides the Arduino IDE (or you use the avr-gcc and avrdude command-line tools) which you can use to compile and upload code to an Arduino board. The PineTime and its ARM processor doesn't have this, so you'll have to familiarize yourself with tools like GCC for ARM, and OpenOCD. Some experience with Arduino does translate over to the PineTime, especially if you've worked with LCD's, or SPI. The PineTime is at least four times faster than an Arduino Uno (even faster at certain specific workloads due to hardware acceleration), and it has 32 times more RAM and 16 times more flash storage.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/lupyuen/ Lup Yuen Lee] (just call him Lup, rhymes with &amp;quot;Up&amp;quot;) has written many articles on PineTime programming. [https://lupyuen.github.io/ Check out the articles here]&lt;br /&gt;
&lt;br /&gt;
=== Can I code firmware for PineTime without an actual PineTime? ===&lt;br /&gt;
&lt;br /&gt;
Yes, you may code PineTime Watch Faces and preview them in a web browser (thanks to WebAssembly)...&lt;br /&gt;
&lt;br /&gt;
[https://lupyuen.github.io/pinetime-rust-mynewt/articles/simulator PineTime Simulator]&lt;br /&gt;
&lt;br /&gt;
Then flash your firmware remotely to a real PineTime via Telegram, and watch your firmware run in a live video stream...&lt;br /&gt;
&lt;br /&gt;
[https://github.com/lupyuen/remote-pinetime-bot/blob/master/README.md Remote PineTime]&lt;br /&gt;
&lt;br /&gt;
=== What do I need for building PineTime firmware locally on my computer? ===&lt;br /&gt;
&lt;br /&gt;
Most flavours of PineTime firmware (InfiniTime, Hypnos, Klok, wasp-os) will build fine on Linux (x64, Arm32, Arm64) and macOS. Just follow the instructions provided.&lt;br /&gt;
&lt;br /&gt;
Download version 9-2020-q2-update of the [https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads Arm Embedded Toolchain arm-none-eabi-gcc]. Other versions of gcc may have problems building the firmware correctly.&lt;br /&gt;
&lt;br /&gt;
On Windows, install [https://docs.microsoft.com/en-us/windows/wsl/about Windows Subsystem for Linux (WSL)] and execute the build steps inside the WSL Terminal (instead of the Windows Command Prompt). USB Programmers (like ST-Link and JLink) are not supported in WSL, so use the Windows Command Prompt to flash your built firmware to PineTime.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/lupyuen/pinetime-rust-mynewt/blob/master/README.md pinetime-rust-mynewt] firmware for PineTime supports building and flashing via the Windows Command Prompt (no need for MinGW and Docker).&lt;br /&gt;
&lt;br /&gt;
=== Can I use Pinebook Pro for developing PineTime? ===&lt;br /&gt;
&lt;br /&gt;
Yes, use version 9-2020-q2-update of the [https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads Arm Embedded Toolchain arm-none-eabi-gcc]. Other versions of gcc may have problems building the firmware correctly.&lt;br /&gt;
&lt;br /&gt;
=== What is ARM Semihosting? ===&lt;br /&gt;
&lt;br /&gt;
We use the SWD (Single Wire Debug) protocol created by ARM for flashing and debugging PineTime's nRF52832 microcontroller, which contains an ARM CPU. (SWD is derived from standard JTAG, but with fewer wires) With ARM CPUs you can trigger a software breakpoint, and allow the debugger (OpenOCD) to do something really nifty: Display a message, read console input, dump out a file, even read a file. That's called ARM Semihosting. [http://www.keil.com/support/man/docs/armcc/armcc_pge1358787046598.htm More about ARM Semihosting]&lt;br /&gt;
&lt;br /&gt;
=== What is OpenOCD? ===&lt;br /&gt;
&lt;br /&gt;
OpenOCD is Open On-Chip Debugger. It's the software that drives your microcontroller debugger/flasher. We need it for running any kind of flashing and debugging with Pi or ST-Link. gdb talks to OpenOCD for debugging firmware. gdb also works with VSCode for debugging firmware visually. [http://openocd.org/doc-release/html/About.html#What-is-OpenOCD_003f More about OpenOCD]&lt;br /&gt;
&lt;br /&gt;
Please use [https://xpack.github.io/openocd xPack OpenOCD] with PineTime. Other versions of OpenOCD seem to have problems with PineTime.&lt;br /&gt;
&lt;br /&gt;
=== How do I remove flash protection? ===&lt;br /&gt;
&lt;br /&gt;
PineTime watches shipped before 20 Sep 2020 have flash protection enabled.&lt;br /&gt;
&lt;br /&gt;
The flash protection can be removed using multiple different methods. If you don't have anything except the PineTime, not even a Raspberry Pi, then you have to order a programmer online: you can use a J-Link, CMSIS-DAP dongle and various other programmers. See [[Reprogramming_the_PineTime|this page to see various methods of reprogramming the PineTime]].&lt;br /&gt;
&lt;br /&gt;
If your PineTime was shipped after 20 Sep 2020, you don't need to remove flash protection. They are shipped with flash protection disabled. You can flash and debug PineTime right away with ST-Link, JLink and Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
=== Why can't you use ST-Link to remove nRF52 Flash Protection? ===&lt;br /&gt;
&lt;br /&gt;
Because ST-Link is a High Level Adapter. It doesn't really implement all SWD functions, just a subset (probably to keep the price low). More details in the section &amp;quot;Why Visual Studio Code with ST-Link (instead of nRFgo Studio with J-LINK)&amp;quot; in the article [https://medium.com/@ly.lee/coding-nrf52-with-rust-and-apache-mynewt-on-visual-studio-code-9521bcba6004?source=friends_link&amp;amp;sk=bb4e2523b922d0870259ab3fa696c7da &amp;quot;Coding nRF52 with Rust and Apache Mynewt on Visual Studio Code&amp;quot;].&lt;br /&gt;
&lt;br /&gt;
=== Since we need a low level SWD adapter like Raspberry Pi anyway, can we do everything on a Pi instead of ST-Link + Windows? ===&lt;br /&gt;
&lt;br /&gt;
Yes, Raspberry Pi works for flashing and debugging PineTime, even for removing flash protection. We have a special version of OpenOCD called OpenOCD SPI that talks to PineTime's SWD port over SPI (without bit-banging). See [https://github.com/lupyuen/pinetime-updater/blob/master/README.md PineTime Updater]&lt;br /&gt;
&lt;br /&gt;
=== Is there a 3D model of PineTime available somewhere? ===&lt;br /&gt;
&lt;br /&gt;
Not yet. Someone did design a cover you can snap on to keep the back shut. [https://www.thingiverse.com/thing:4172849 More details]&lt;br /&gt;
&lt;br /&gt;
=== Are there any alternatives to the wrist band provided with the PineTime? ===&lt;br /&gt;
&lt;br /&gt;
No, but PineTime accepts standard 20mm wrist band that is widely available by a third party.&lt;br /&gt;
&lt;br /&gt;
Note that some sellers have a different point of view on what standard is. So you should always check the fitting to make sure it looks like the one used by PineTime.&lt;br /&gt;
&lt;br /&gt;
=== I'm stuck. How can I get help? ===&lt;br /&gt;
&lt;br /&gt;
Chat with the PineTime Community on [[PineTime#Community|Matrix / Discord / Telegram / IRC]] (They are bridged into a single chatroom)&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineTime_FAQ&amp;diff=9999</id>
		<title>PineTime FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineTime_FAQ&amp;diff=9999"/>
		<updated>2021-04-22T18:58:01Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Does PineTime run Linux? ===&lt;br /&gt;
&lt;br /&gt;
No. [https://forum.pine64.org/showthread.php?tid=8112 Please read this forum article] for information about Linux on PineTime. Also check out the article [https://lupyuen.github.io/pinetime-rust-mynewt/articles/pinetime &amp;quot;PineTime doesn't run Linux... But that's OK!&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
=== Why are there two versions of the PineTime in the store? ===&lt;br /&gt;
&lt;br /&gt;
See the below question and answer.&lt;br /&gt;
&lt;br /&gt;
=== Why can I only buy the closed version in a 3-pack, and the open version per one? ===&lt;br /&gt;
&lt;br /&gt;
TL:DR: The unsealed PineTime is for development, the sealed one is for production use, because of firmware uploads. That is also why they were initially sold three in a pack.&lt;br /&gt;
&lt;br /&gt;
In the current situation in development there are some reasons to want to be sure you only experiment with an open device. If you install the wrong firmware, your device could be bricked, until you find a way to open it, which will likely damage the device.&lt;br /&gt;
The idea is that if you want to develop an application for the PineTime, you will be testing it out first, and only after you know for sure your new firmware is well tested, you will install it on sealed devices. If you are in the beta stage, having more than one PineTime is probably a good idea. So to prevent people from locking themselves out at the first test, it was decided to sell the closed version only as a pack of 3. Development can be done on an open device, so any issues can be easily handled.&lt;br /&gt;
&lt;br /&gt;
=== How long does it take to ship my PineTime? ===&lt;br /&gt;
&lt;br /&gt;
That depends on whether you chose for Standard or Express shipping. Standard shipping for the dev kit may take up to a few weeks.&lt;br /&gt;
&lt;br /&gt;
=== How do I install new software on PineTime? ===&lt;br /&gt;
&lt;br /&gt;
The nRF Connect mobile app (Android and iOS) may also be used to update the firmware on your PineTime. See [https://lupyuen.github.io/pinetime-rust-mynewt/articles/cloud#download-and-test-our-pinetime-firmware &amp;quot;Download and Test Our PineTime Firmware&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Also see [[Reprogramming_the_PineTime|this page to see various methods of reprogramming the devkit PineTime the wired way]].&lt;br /&gt;
&lt;br /&gt;
If you have a Sealed PineTime, flash only Certified PineTime Firmware to your PineTime. If you flash non-Certified PineTime Firmware, your Sealed PineTime may be bricked permanently.&lt;br /&gt;
&lt;br /&gt;
The only Certified PineTime Firmware available today is [https://github.com/JF002/InfiniTime/releases/tag/0.14.0 InfiniTime 0.14.0]. Download the file &amp;quot;dfu-0.14.0.zip&amp;quot; under &amp;quot;Assets&amp;quot; and flash to PineTime with nRF Connect. Refer to the instructions here: [https://lupyuen.github.io/pinetime-rust-mynewt/articles/cloud#download-and-test-our-pinetime-firmware &amp;quot;Download and Test Our PineTime Firmware&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Remember to validate the firmware after flashing: Swipe up to show the menu, tap the Ticks icon, tap &amp;quot;Validate&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== My PineTime arrived, now what? ===&lt;br /&gt;
&lt;br /&gt;
You should start by testing out all the features of the watch, to make sure everything works. Power it on and check the display.&lt;br /&gt;
&lt;br /&gt;
PineTime is shipped with InfiniTime firmware. Press the watch button to show the clock, then swipe up on the touchscreen to reveal the menu.&lt;br /&gt;
&lt;br /&gt;
On your Android phone, install the nRF Connect mobile app to sync the date and time with PineTime. See [https://lupyuen.github.io/pinetime-rust-mynewt/articles/cloud#set-pinetime-date-and-time-with-nrf-connect &amp;quot;Set PineTime Date and Time with nRF Connect&amp;quot;] (nRF Connect on iOS can't be used for setting the date and time, because it doesn't implement the GATT Time Service)&lt;br /&gt;
&lt;br /&gt;
Download the latest Certified PineTime Firmware (see the previous question) and flash to PineTime with nRF Connect. Refer to the instructions here: [https://lupyuen.github.io/pinetime-rust-mynewt/articles/cloud#download-and-test-our-pinetime-firmware &amp;quot;Download and Test Our PineTime Firmware&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Remember to validate the firmware after flashing: Swipe up to show the menu, tap the Ticks icon, tap &amp;quot;Validate&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== What's the OS that's preinstalled on the PineTime by default? ===&lt;br /&gt;
&lt;br /&gt;
PineTime ships with the open source [https://github.com/JF002/InfiniTime InfiniTime firmware].&lt;br /&gt;
&lt;br /&gt;
To support firmware update and rollback, PineTime includes the open source [https://lupyuen.github.io/pinetime-rust-mynewt/articles/mcuboot MCUBoot Bootloader].&lt;br /&gt;
&lt;br /&gt;
=== Can we use this OS or its source code? ===&lt;br /&gt;
&lt;br /&gt;
Yes, [https://github.com/JF002/InfiniTime InfiniTime] and the [https://lupyuen.github.io/pinetime-rust-mynewt/articles/mcuboot MCUBoot Bootloader] are open source.&lt;br /&gt;
&lt;br /&gt;
=== Why is the back exposed? Is it supposed to snap on? ===&lt;br /&gt;
&lt;br /&gt;
The back cover of the PineTime dev kit is exposed so that you can flash and debug the device with the SWD pins. The main unit and cover does not snap (lock) together. If you want to attach the back cover anyway, you can use glue or tape.&lt;br /&gt;
&lt;br /&gt;
=== What hardware should I use to flash code to the PineTime? ===&lt;br /&gt;
&lt;br /&gt;
There are several ways you can do this, check out [[Reprogramming the PineTime]]&lt;br /&gt;
&lt;br /&gt;
=== How do I connect the PineTime to a programmer? ===&lt;br /&gt;
&lt;br /&gt;
Here's how: [[PineTime devkit wiring]]&lt;br /&gt;
&lt;br /&gt;
=== How do I set the time on PineTime? ===&lt;br /&gt;
&lt;br /&gt;
You can use either nRF Connect, custom GadgetBridge build or the proprietary Da Fit app. See [https://lupyuen.github.io/pinetime-rust-mynewt/articles/cloud#set-pinetime-date-and-time-with-nrf-connect &amp;quot;Set PineTime Date and Time with nRF Connect&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
You can also set the time using your PinePhone or other Linux-based Bluetooth LE capable device with the Bluez software installed. Install the bluez package and make sure your PineTime is running and awake with InfiniTime 0.7.1 or later.&lt;br /&gt;
&lt;br /&gt;
  $ bluetoothctl&lt;br /&gt;
  [ bluetooth ]# scan on&lt;br /&gt;
  ...&lt;br /&gt;
  [NEW] Device D7:03:FB:6E:31:B2 Pinetime-JF&lt;br /&gt;
  ...&lt;br /&gt;
  [bluetooth]# pair D7:03:FB:6E:31:B2&lt;br /&gt;
  Attempting to pair with D7:03:FB:6E:31:B2&lt;br /&gt;
  ...&lt;br /&gt;
  [NEW] Characteristic (Handle 0xfd80)&lt;br /&gt;
    /org/bluez/hci0/dev_D7_03_FB_6E_31_B2/service0015/char0016&lt;br /&gt;
    00002a2b-0000-1000-8000-00805f9b34fb&lt;br /&gt;
    Current Time&lt;br /&gt;
  ...&lt;br /&gt;
  [Pinetime-JF]# menu gatt&lt;br /&gt;
  ...&lt;br /&gt;
  [Pinetime-JF]# select-attribute /org/bluez/hci0/dev_D7_03_FB_6E_31_B2/service0015/char0016&lt;br /&gt;
  [Pinetime-JF:/service0015/char0016]# read&lt;br /&gt;
  Attempting to read /org/bluez/hci0/dev_D7_03_FB_6E_31_B2/service0015/char0016&lt;br /&gt;
  [CHG] Attribute /org/bluez/hci0/dev_D7_03_FB_6E_31_B2/service0015/char0016 Value:&lt;br /&gt;
    b2 07 01 01 00 04 15 00 00                       .........       &lt;br /&gt;
    b2 07 01 01 00 04 15 00 00                       .........&lt;br /&gt;
  [Pinetime-JF:/service0015/char0016]# write &amp;quot;0xe4 0x07 0x0c 0x1f 0x0e 0x02 0x00 0x00 0x00&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is the format for the current time as hex bytes:&lt;br /&gt;
  &amp;lt;lsb of year&amp;gt; &amp;lt;msb of year&amp;gt; &amp;lt;month (1-12)&amp;gt; &amp;lt;day (1-31)&amp;gt; &amp;lt;hour (0-23)&amp;gt; &amp;lt;minute (0-59)&amp;gt; &amp;lt;seconds (0-59)&amp;gt; &amp;lt;weekday (1-7 where 1=Monday)&amp;gt; &amp;lt;fractions (1/256th of second)&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Is there a standard agreed method of pushing OTA updates so that one could seal the PineTime dev kit nicely? ===&lt;br /&gt;
&lt;br /&gt;
InfiniTime supports firmware updates over Bluetooth LE with the nRF Connect mobile app. See [https://lupyuen.github.io/pinetime-rust-mynewt/articles/cloud#download-and-test-our-pinetime-firmware &amp;quot;Download and Test Our PineTime Firmware&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
=== My PineTime's screen shows garbage, how do I fix it? ===&lt;br /&gt;
&lt;br /&gt;
This is usually caused by unplugging the device after it has booted, it needs to be reinitialised. To do so just restart the watch by removing power to it.&lt;br /&gt;
&lt;br /&gt;
=== I have experience developing on Arduino. How does the PineTime compare? ===&lt;br /&gt;
&lt;br /&gt;
To learn programming on PineTime, [https://lupyuen.github.io/pinetime-rust-mynewt/articles/cloud check out this article]&lt;br /&gt;
&lt;br /&gt;
Arduino provides the Arduino IDE (or you use the avr-gcc and avrdude command-line tools) which you can use to compile and upload code to an Arduino board. The PineTime and its ARM processor doesn't have this, so you'll have to familiarize yourself with tools like GCC for ARM, and OpenOCD. Some experience with Arduino does translate over to the PineTime, especially if you've worked with LCD's, or SPI. The PineTime is at least four times faster than an Arduino Uno (even faster at certain specific workloads due to hardware acceleration), and it has 32 times more RAM and 16 times more flash storage.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/lupyuen/ Lup Yuen Lee] (just call him Lup, rhymes with &amp;quot;Up&amp;quot;) has written many articles on PineTime programming. [https://lupyuen.github.io/ Check out the articles here]&lt;br /&gt;
&lt;br /&gt;
=== Can I code firmware for PineTime without an actual PineTime? ===&lt;br /&gt;
&lt;br /&gt;
Yes, you may code PineTime Watch Faces and preview them in a web browser (thanks to WebAssembly)...&lt;br /&gt;
&lt;br /&gt;
[https://lupyuen.github.io/pinetime-rust-mynewt/articles/simulator PineTime Simulator]&lt;br /&gt;
&lt;br /&gt;
Then flash your firmware remotely to a real PineTime via Telegram, and watch your firmware run in a live video stream...&lt;br /&gt;
&lt;br /&gt;
[https://github.com/lupyuen/remote-pinetime-bot/blob/master/README.md Remote PineTime]&lt;br /&gt;
&lt;br /&gt;
=== What do I need for building PineTime firmware locally on my computer? ===&lt;br /&gt;
&lt;br /&gt;
Most flavours of PineTime firmware (InfiniTime, Hypnos, Klok, wasp-os) will build fine on Linux (x64, Arm32, Arm64) and macOS. Just follow the instructions provided.&lt;br /&gt;
&lt;br /&gt;
Download version 9-2020-q2-update of the [https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads Arm Embedded Toolchain arm-none-eabi-gcc]. Other versions of gcc may have problems building the firmware correctly.&lt;br /&gt;
&lt;br /&gt;
On Windows, install [https://docs.microsoft.com/en-us/windows/wsl/about Windows Subsystem for Linux (WSL)] and execute the build steps inside the WSL Terminal (instead of the Windows Command Prompt). USB Programmers (like ST-Link and JLink) are not supported in WSL, so use the Windows Command Prompt to flash your built firmware to PineTime.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/lupyuen/pinetime-rust-mynewt/blob/master/README.md pinetime-rust-mynewt] firmware for PineTime supports building and flashing via the Windows Command Prompt (no need for MinGW and Docker).&lt;br /&gt;
&lt;br /&gt;
=== Can I use Pinebook Pro for developing PineTime? ===&lt;br /&gt;
&lt;br /&gt;
Yes, use version 9-2020-q2-update of the [https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads Arm Embedded Toolchain arm-none-eabi-gcc]. Other versions of gcc may have problems building the firmware correctly.&lt;br /&gt;
&lt;br /&gt;
=== What is ARM Semihosting? ===&lt;br /&gt;
&lt;br /&gt;
We use the SWD (Single Wire Debug) protocol created by ARM for flashing and debugging PineTime's nRF52832 microcontroller, which contains an ARM CPU. (SWD is derived from standard JTAG, but with fewer wires) With ARM CPUs you can trigger a software breakpoint, and allow the debugger (OpenOCD) to do something really nifty: Display a message, read console input, dump out a file, even read a file. That's called ARM Semihosting. [http://www.keil.com/support/man/docs/armcc/armcc_pge1358787046598.htm More about ARM Semihosting]&lt;br /&gt;
&lt;br /&gt;
=== What is OpenOCD? ===&lt;br /&gt;
&lt;br /&gt;
OpenOCD is Open On-Chip Debugger. It's the software that drives your microcontroller debugger/flasher. We need it for running any kind of flashing and debugging with Pi or ST-Link. gdb talks to OpenOCD for debugging firmware. gdb also works with VSCode for debugging firmware visually. [http://openocd.org/doc-release/html/About.html#What-is-OpenOCD_003f More about OpenOCD]&lt;br /&gt;
&lt;br /&gt;
Please use [https://xpack.github.io/openocd xPack OpenOCD] with PineTime. Other versions of OpenOCD seem to have problems with PineTime.&lt;br /&gt;
&lt;br /&gt;
=== How do I remove flash protection? ===&lt;br /&gt;
&lt;br /&gt;
PineTime watches shipped before 20 Sep 2020 have flash protection enabled.&lt;br /&gt;
&lt;br /&gt;
The flash protection can be removed using multiple different methods. If you don't have anything except the PineTime, not even a Raspberry Pi, then you have to order a programmer online: you can use a J-Link, CMSIS-DAP dongle and various other programmers. See [[Reprogramming_the_PineTime|this page to see various methods of reprogramming the PineTime]].&lt;br /&gt;
&lt;br /&gt;
If your PineTime was shipped after 20 Sep 2020, you don't need to remove flash protection. They are shipped with flash protection disabled. You can flash and debug PineTime right away with ST-Link, JLink and Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
=== Why can't you use ST-Link to remove nRF52 Flash Protection? ===&lt;br /&gt;
&lt;br /&gt;
Because ST-Link is a High Level Adapter. It doesn't really implement all SWD functions, just a subset (probably to keep the price low). More details in the section &amp;quot;Why Visual Studio Code with ST-Link (instead of nRFgo Studio with J-LINK)&amp;quot; in the article [https://medium.com/@ly.lee/coding-nrf52-with-rust-and-apache-mynewt-on-visual-studio-code-9521bcba6004?source=friends_link&amp;amp;sk=bb4e2523b922d0870259ab3fa696c7da &amp;quot;Coding nRF52 with Rust and Apache Mynewt on Visual Studio Code&amp;quot;].&lt;br /&gt;
&lt;br /&gt;
=== Since we need a low level SWD adapter like Raspberry Pi anyway, can we do everything on a Pi instead of ST-Link + Windows? ===&lt;br /&gt;
&lt;br /&gt;
Yes, Raspberry Pi works for flashing and debugging PineTime, even for removing flash protection. We have a special version of OpenOCD called OpenOCD SPI that talks to PineTime's SWD port over SPI (without bit-banging). See [https://github.com/lupyuen/pinetime-updater/blob/master/README.md PineTime Updater]&lt;br /&gt;
&lt;br /&gt;
=== Is there a 3D model of PineTime available somewhere? ===&lt;br /&gt;
&lt;br /&gt;
Not yet. Someone did design a cover you can snap on to keep the back shut. [https://www.thingiverse.com/thing:4172849 More details]&lt;br /&gt;
&lt;br /&gt;
=== Are there any alternatives to the wrist band provided with the PineTime? ===&lt;br /&gt;
&lt;br /&gt;
No, but PineTime accepts standard 20mm wrist band that is widely available by a third party.&lt;br /&gt;
&lt;br /&gt;
Note that some sellers have a different point of view on what standard is. So you should always check the fitting to make sure it looks like the one used by PineTime.&lt;br /&gt;
&lt;br /&gt;
=== I'm stuck. How can I get help? ===&lt;br /&gt;
&lt;br /&gt;
Chat with the PineTime Community on [[PineTime#Community|Matrix / Discord / Telegram / IRC]] (They are bridged into a single chatroom)&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=InfiniTime&amp;diff=9998</id>
		<title>InfiniTime</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=InfiniTime&amp;diff=9998"/>
		<updated>2021-04-22T18:55:43Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== InfiniTime ==&lt;br /&gt;
InfiniTime (also known as JF's project, FreeRTOS firmware or Pinetime-JF) is an open source (GPLv3) firmware written in C++ and based on FreeRTOS, LVGL and NimBLE. This firmware (version 0.7.1) is preloaded at the factory since the new batch of PineTime devkits and sealed PineTimes of end of September 2020. '''This page contains general information about the project. Actual project documentation and nuances are documented in the repository'''&lt;br /&gt;
&lt;br /&gt;
* GitHub repo : https://github.com/JF002/InfiniTime&lt;br /&gt;
* Official website : https://infinitime.io/&lt;br /&gt;
&lt;br /&gt;
== Read this first! ==&lt;br /&gt;
* InfiniTime and the bootloader are still in heavy development, and some features might not work as expected. Any issues should be reported on GitHub.&lt;br /&gt;
* Do not use a sealed PineTime as a development device, there is a fair amount of chances that you'll brick it with very experimental firmware.&lt;br /&gt;
* OTA is relatively stable, but when you're on an outdated bootloader version it can freeze which will require you to wait for the battery to run out.&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
{{warning|1=Please read this section carefully before upgrading the firmware on your PineTime, especially if you are using a sealed device!}}&lt;br /&gt;
=== Black screen after a reset in sleep mode ===&lt;br /&gt;
==== Description ====&lt;br /&gt;
This issue occurs if you are using the original bootloader (from InfiniTime 0.7.1), upgraded from InfiniTime 0.7.1 to 0.8.2 and the watch resets while the display is OFF : the watch is stuck on a black screen and does not respond to touch, button press or BLE.&lt;br /&gt;
&lt;br /&gt;
The reset can be triggered by the watchdog or manually by long pressing the button. If that doesn't work, wait for the battery to run out, it'll reboot then.&lt;br /&gt;
&lt;br /&gt;
This issue is caused by InfiniTime 0.8.2 that put the external SPI flash memory to sleep before switching the display off and by the bootloader that cannot wake the memory chip up. The bootloader is stuck in an infinite loop.&lt;br /&gt;
&lt;br /&gt;
More info : https://github.com/lupyuen/pinetime-rust-mynewt/issues/24 and https://github.com/JF002/InfiniTime/issues/60&lt;br /&gt;
&lt;br /&gt;
==== Workaround ====&lt;br /&gt;
On a development kit, a simple reset via SWD is needed to unlock the bootloader.&lt;br /&gt;
&lt;br /&gt;
On a sealed device, the only way to work around this issue is to wait for the battery to drain completely before trying again.&lt;br /&gt;
&lt;br /&gt;
This issue can be avoided by ensuring that the display is ON when manually resetting the device (long push on the button).&lt;br /&gt;
&lt;br /&gt;
==== Fixed version ====&lt;br /&gt;
This issues is fixed in [https://github.com/JF002/InfiniTime/releases/tag/0.8.3 InfiniTime 0.8.3]&lt;br /&gt;
&lt;br /&gt;
== Releases == &lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.7.1 Version 0.7.1] ===&lt;br /&gt;
This is the version that ships with PineTime devkits and sealed PineTime as of September 2020.&lt;br /&gt;
* Time synchronization over BLE&lt;br /&gt;
* Display brightness setting&lt;br /&gt;
* Notifications over BLE&lt;br /&gt;
* Integration with AmazFish (SailFishOS) and Gadgetbridge (Android)&lt;br /&gt;
* OTA using NRFConnect&lt;br /&gt;
&lt;br /&gt;
Bootloader : https://github.com/lupyuen/pinetime-rust-mynewt/releases/tag/v4.1.7&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.8.2 Version 0.8.2] ===&lt;br /&gt;
* Music control app&lt;br /&gt;
* Paint app&lt;br /&gt;
* Manual image validation after OTA&lt;br /&gt;
&lt;br /&gt;
Bootloader : https://github.com/lupyuen/pinetime-rust-mynewt/releases/tag/v5.0.4.&lt;br /&gt;
&lt;br /&gt;
This new version of the bootloader fixes [[#Black_screen_after_a_reset_in_sleep_mode]] and enables the watchdog before launching the firmware.&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.8.3 Version 0.8.3] ===&lt;br /&gt;
* Fixes the &amp;quot;bootloader stuck after a reset&amp;quot; mentioned in 0.8.2 above&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.9.0 Version 0.9.0] ===&lt;br /&gt;
* Touch panel fixed (no more freezing)&lt;br /&gt;
* Improved music application (possibility to control both volumes and browsing, display the song progression)&lt;br /&gt;
* Notification UI rewritten: can now display up to 100 characters&lt;br /&gt;
* Improved BLE connectivity&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.10.0 Version 0.10.0] ===&lt;br /&gt;
* 2 new games: Pong and 2048&lt;br /&gt;
* Fixed display glitches and improved needed time to turn on the display&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.11.0 Version 0.11.0] ===&lt;br /&gt;
* Heart-rate sensor application:&lt;br /&gt;
  * Displays the current value, and when running, this value is also displayed on the clock face&lt;br /&gt;
  * Value exposed over BLE, meaning other applications can read it (e.g. companion app such as Amazfish)&lt;br /&gt;
* Navigation app: InfiNav - works e.g. with PureMaps on SailfishOS&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.12.0 Version 0.12.0] ===&lt;br /&gt;
* Improved BLE connection&lt;br /&gt;
* OTA updates much more reliable&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.13.0 Version 0.13.0] ===&lt;br /&gt;
* Vibration&lt;br /&gt;
* Call notification: it is possible to accept/ignore/reject a call from the PineTime&lt;br /&gt;
* Music app got nicer icons&lt;br /&gt;
* BLE connectivity improved a bit more&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.14.0 Version 0.14.0] ===&lt;br /&gt;
* LVGL 7&lt;br /&gt;
* Bugfixes to the build process&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineTime_Hardware_Wishlist&amp;diff=9880</id>
		<title>PineTime Hardware Wishlist</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineTime_Hardware_Wishlist&amp;diff=9880"/>
		<updated>2021-04-17T14:24:12Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains a list of things people wish PineTime did differently&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
&lt;br /&gt;
* Long pressing the button should power-cycle the watch without any software being involved&lt;br /&gt;
* Other display tech could be explored. [//en.Wikipedia.org/wiki/Transflective_liquid-crystal_display A transflective LCD] would probably be a nice option. Or potentially OLED?&lt;br /&gt;
* Touchscreen should possibly have a configurable sensitivity level for both glove-wearing and droplet-resistance. Preferably it should still be a capacitive one, a resistive touchscreen would have too many trade-offs.&lt;br /&gt;
* A slightly bigger 256×256 pixel graphics display size is preferable for its binary alignment, affording some low-level simplicity – it has the property that its X and Y coordinates are each addressable with a single byte, with no out-of-bounds; its total number of pixels is 65536 (another power of 2), and each pixel is addressable with exactly 2 bytes, with perfect efficiency. The [http://Pelulamu.net/ibniz IBNIZ (Ideally Bare Numeric Impression giZmo) virtual machine], designed for fun minimalist demoscene graphics, has chosen 256×256 for its virtual display, and makes use of these simplicity advantages. If PineTime also chose 256×256 then it would be a target platform for unclipped IBNIZ demoscene programmes, which would be really fun to play around with on one's wrist!&lt;br /&gt;
* A full redraw on the display takes 120ms at the very least, which is 8Hz. A smooth scrolling/usage/animation experience would be 30Hz minimum, preferably 60. I heard a rumor that the SPI connection to the display is a bottleneck.&lt;br /&gt;
* Some sort of scroll wheel would be nice for convenience.&lt;br /&gt;
* Changed GPIO assignment so more functionality is available (i.e. NFC and VSYNC)&lt;br /&gt;
* Wireless charging, or Qi Charging capability&lt;br /&gt;
* An external RTC circuit saving the current time to allow the main MCU go to deep-sleep.&lt;br /&gt;
* nRF5340 update: QSPI, CryptoCell + Secure Key Storage, has more RAM, a coprocessor and the possibility to expose USB through power pins&lt;br /&gt;
* Preferably a pre-certified MCU module with a ceramic antenna&lt;br /&gt;
* Version without sensors but maybe bigger battery&lt;br /&gt;
* A couple of pins on the programmer connector to allow UART while developing (currently there is a TX test point on PCB). (Note: There's ARM SemiHosting and Segger RTT)&lt;br /&gt;
* Connect the pin of LCD controller that allows RD/WR from it in order to save RAM on the MCU.&lt;br /&gt;
* LCD must be centered on case. Currently is not and watchfaces seems different when clock is put on the other wrist.&lt;br /&gt;
* A NFC antenna around the case, connected to the NFC pins.&lt;br /&gt;
* Used sensors should be NDA-free and preferably also blob-free. For example the BMA421 accelerometer doesn't have a datasheet (it seems private to some hardware integrators): a more open one would be much easier to develop for. Special attention should be paid to advanced features, such as step counting integration or flick detection.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineCube&amp;diff=9612</id>
		<title>PineCube</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineCube&amp;diff=9612"/>
		<updated>2021-03-27T14:31:41Z</updated>

		<summary type="html">&lt;p&gt;Avamander: /* Specifications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{note|1=PAGE UNDER CONSTRUCTION, INFO SUBJECT TO CHANGE}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Specifications ==&lt;br /&gt;
* '''Dimensions:''' 55mm x 51mm x 51.5mm&lt;br /&gt;
* '''Weight:''' 55g&lt;br /&gt;
* '''Storage:'''&lt;br /&gt;
** MicroSD slot, bootable&lt;br /&gt;
** 128Mb SPI Nor Flash, bootable&lt;br /&gt;
* '''Cameras:''' OV5640, 5Mpx &lt;br /&gt;
* '''CPU:''' Allwinner(Sochip) ARM Cortex-A7 MPCore, 800MHz&lt;br /&gt;
* '''RAM:''' 128MB DDR3&lt;br /&gt;
* '''I/O:'''&lt;br /&gt;
** 10/100Mbps Ethernet with passive PoE (''4-18V!'')&lt;br /&gt;
** USB 2.0 A host&lt;br /&gt;
** 26 pins GPIO port&lt;br /&gt;
*** 2x 3.3V Ouptut&lt;br /&gt;
*** 2x 5V Output&lt;br /&gt;
*** 1x I2C&lt;br /&gt;
*** 2x UART&lt;br /&gt;
*** 2x PWM&lt;br /&gt;
*** 1x SPI&lt;br /&gt;
*** 1x eMMC/SDIO/SD (8-bit)&lt;br /&gt;
*** 6x Interrupts&lt;br /&gt;
*** '''Note: Interfaces are multiplexed, so they can't be all used at same time'''&lt;br /&gt;
** Internal microphone&lt;br /&gt;
* '''Network:'''&lt;br /&gt;
** WiFi&lt;br /&gt;
* '''Screen:''' optional 4.5&amp;quot; RGB LCD screen&lt;br /&gt;
* '''Misc. features:''' &lt;br /&gt;
** Volume and home buttons&lt;br /&gt;
** Speakers and Microphone&lt;br /&gt;
* '''Power DC in:'''&lt;br /&gt;
** 5V 1A from MicroUSB Port or GPIO port&lt;br /&gt;
** 4V-18V from Ethernet passive PoE&lt;br /&gt;
* '''Battery:''' optional 950-1600mAh model: 903048 Lithium Polymer Ion Battery Pack, can be purchase at [https://www.amazon.com/AKZYTUE-1200mAh-Battery-Rechargeable-Connector/dp/B07TWHHCNK/ Amazon.com]&lt;br /&gt;
&lt;br /&gt;
== PineCube board information, schematics and certifications ==&lt;br /&gt;
* PineCube mainboard schematic:&lt;br /&gt;
** [https://files.pine64.org/doc/PineCube/PineCube%20MainBoard%20Schematic%20ver%201.0-20200727.pdf PineCube mainboard Released Schematic ver 1.0]&lt;br /&gt;
* PineCube faceboard schematic:&lt;br /&gt;
** [https://files.pine64.org/doc/PineCube/PineCube%20FaceBoard%20Schematic%20ver%201.0-20200727.pdf PineCube faceboard Released Schematic ver 1.0]&lt;br /&gt;
* PineCube certifications:&lt;br /&gt;
** [https://files.pine64.org/doc/cert/PineCube-FCC-SDOC%20certification%20S20072502302001.pdf PineCube FCC Certificate]&lt;br /&gt;
** [https://files.pine64.org/doc/cert/PineCube-CE-EMC%20certification%20S20072502301001.pdf PineCube CE RED Certificate]&lt;br /&gt;
** [https://files.pine64.org/doc/cert/PineCube-ROHS%20Test%20Report.pdf PineCube ROHS Test Report]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Datasheets for components and peripherals ==&lt;br /&gt;
* Allwinner (Sochip) S3 SoC information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinecube/S3_Datasheet_V1.1-20180123.pdf Sochip S3 SoC Data Sheet V1.1]&lt;br /&gt;
&lt;br /&gt;
* X-Powers AXP209 PMU (Power Management Unit) information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinecube/AXP209_Datasheet_v1.0en.pdf AXP209 PMIC datasheet]&lt;br /&gt;
&lt;br /&gt;
* CMOS camera module information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinecube/CH-5A-DV-V2.0%20Specification.pdf PineCube Camera Module Specification]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinephone/OV5640_datasheet.pdf OV5640 5MP CMOS Image Sensor SoC datasheet]&lt;br /&gt;
&lt;br /&gt;
* LCD touch screen panel information:&lt;br /&gt;
&lt;br /&gt;
* Lithium battery information:&lt;br /&gt;
&lt;br /&gt;
* WiFi/BT module information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinecube/rtl8189es.pdf RTL8189ES specification]&lt;br /&gt;
&lt;br /&gt;
* GPIO Header Pinout: ([[:File:PineCube_GPIO.pdf|PDF]], [https://pine64.gami.ee/pinecube/gpio-pinout.html HTML]) (Pin1 is marked on the board by a white dot on the PCB)&lt;br /&gt;
[[File:PineCube_GPIO_Pinout.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Case information:&lt;br /&gt;
** [https://files.pine64.org/doc/PineCube/PineCube%20Case%203D.zip PinePhone 3D file]&lt;br /&gt;
&lt;br /&gt;
[[File:PineCube_Case-1.jpg|400px]]  [[File:PineCube_Case-2.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
== Operating Systems ==&lt;br /&gt;
&lt;br /&gt;
=== Mainlining Efforts ===&lt;br /&gt;
&lt;br /&gt;
Please note:&lt;br /&gt;
&lt;br /&gt;
* this list is most likely not complete&lt;br /&gt;
* no review of functionality is done here, it only serves as a collection of efforts&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Linux kernel&lt;br /&gt;
|-&lt;br /&gt;
| Type&lt;br /&gt;
| Link&lt;br /&gt;
| Available in version&lt;br /&gt;
|-&lt;br /&gt;
| Devicetree Entry Pinecube&lt;br /&gt;
| https://lkml.org/lkml/2020/9/22/1241&lt;br /&gt;
| 5.10&lt;br /&gt;
|-&lt;br /&gt;
| Correction for AXP209 driver&lt;br /&gt;
| https://lkml.org/lkml/2020/9/22/1243&lt;br /&gt;
| 5.9&lt;br /&gt;
|-&lt;br /&gt;
| Additional Fixes for AXP209 driver&lt;br /&gt;
| https://lore.kernel.org/lkml/20201031182137.1879521-8-contact@paulk.fr/&lt;br /&gt;
| tdb (5.11?)&lt;br /&gt;
|-&lt;br /&gt;
| Device Tree Fixes&lt;br /&gt;
| https://lore.kernel.org/lkml/20201003234842.1121077-1-icenowy@aosc.io/&lt;br /&gt;
| 5.10&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|U-boot&lt;br /&gt;
|-&lt;br /&gt;
| Type&lt;br /&gt;
| Link&lt;br /&gt;
| Available in version&lt;br /&gt;
|-&lt;br /&gt;
| PineCube Board Support&lt;br /&gt;
| https://patchwork.ozlabs.org/project/uboot/list/?series=210044&lt;br /&gt;
| expected in v2021.01&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Buildroot&lt;br /&gt;
|-&lt;br /&gt;
| No known mainlining efforts yet&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== NixOS ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/danielfullmer/pinecube-nixos danielfullmer's Github]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Buildroot ===&lt;br /&gt;
[https://elimo.io Elimo Engineering] integrated support for the PineCube into Buildroot.&lt;br /&gt;
&lt;br /&gt;
This has not been merged into upstream Buildroot yet, but you can find the repo on [https://github.com/elimo-engineering/buildroot Elimo's GitHub account] and build instructions in the [https://github.com/elimo-engineering/buildroot/tree/pine64/pinecube/board/pine64/pinecube board support directory] readme.&lt;br /&gt;
The most important thing that this provides is support for the S3's DDR3 in u-boot. Unfortunately mainline u-boot does not have that yet, but the u-boot patches from [https://github.com/danielfullmer/pinecube-nixos Daniel Fullmer's NixOS repo] were easy enough to use on buildroot.&lt;br /&gt;
This should get you a functional system that boots to a console on UART0. It's pretty fast too, getting there in 1.5 seconds from u-boot to login prompt.&lt;br /&gt;
&lt;br /&gt;
=== Armbian ===&lt;br /&gt;
&lt;br /&gt;
The only Armbian release with support for Ethernet and the camera module is the Ubuntu Groovy release. The Ubuntu Groovy release is an experimental, automatically generated release and it appears to support additional hardware from the other Armbian releases.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Armbian Build Image with motion [microSD Boot] [20201222] ====&lt;br /&gt;
* Armbian Ubuntu Focal build for the Pinecube with the motion (detection) package preinstalled.&lt;br /&gt;
* There are 2 ways to interact with the OS:&lt;br /&gt;
** Scan for the the device IP (with hostname pinecube)&lt;br /&gt;
** Use the PINE64 USB SERIAL CONSOLE/PROGRAMMER to login to the serial console, then check for assigned IP&lt;br /&gt;
* DD image (for 8GB micoSD card and above)&lt;br /&gt;
** [https://files.pine64.org//os/PineCube/armbian/Armbian_21.02.0-trunk_Pinecube_focal_dev_5.10.0.img.xz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (XZip file): 61e5a6d3ab0f74ce8367c97b7f8cbb7b&lt;br /&gt;
*** File Size: 328MGB&lt;br /&gt;
&lt;br /&gt;
[https://gist.github.com/Icenowy/ff68f6e4ba8231380d3a295226e63fb3 GitHub gist] for the userpatch which pre-installs and configures the motion (detection) package. &lt;br /&gt;
&lt;br /&gt;
Armbian Builds for PineCube are [https://www.armbian.com/pinecube/ available for download], once again thanks to [https://github.com/armbian/build/pull/2364/files the work] of Icenowy Zheng.&lt;br /&gt;
Although [https://www.armbian.com/download/?device_support=No+official+support+(CSC) not officially supported] it enables the usage of Debian and Ubuntu.&lt;br /&gt;
&lt;br /&gt;
A serial console can be established with 152008N1 (no hardware flow control). Login credentials are as usual in Armbian (login: root, password: 1234).&lt;br /&gt;
&lt;br /&gt;
Motion daemon can be enabled using systemctl (With root) &amp;lt;code&amp;gt;systemctl enable motion&amp;lt;/code&amp;gt;. Then just reboot.&lt;br /&gt;
&lt;br /&gt;
==== Serial connection using screen and the woodpecker USB serial device ====&lt;br /&gt;
&lt;br /&gt;
First connect the woodpecker USB serial device to the PineCube. Pin 1 on the PineCube has a small white dot on the PCB - this should be directly next to the microusb power connection. Attach the GND pin on the woodpecker to pin 6 (GND) on the PineCube, TXD from the woodpecker to pin 10 (UART_RXD) on the PineCube, and RXD from the woodpecker to pin 8 (UART_TXD) on the PineCube.&lt;br /&gt;
&lt;br /&gt;
On the host system which has the woodpecker USB serial device attached, it is possible to run screen and to communicate directly with the PineCube:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;screen /dev/ttyUSB0 115200&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Serial connection using screen and Arduino Uno ====&lt;br /&gt;
&lt;br /&gt;
You can use the Arduino Uno or other Arduino boards as a USB serial device.&lt;br /&gt;
&lt;br /&gt;
First you must either remove the microcontroller from it's socket, or if your Arduino board does not allow this, then you can use wires to jump RESET (RST) and GND to isolate the SOC.&lt;br /&gt;
&lt;br /&gt;
After this you can either use the Arduino IDE and it's Serial monitor after selecting your &amp;lt;code&amp;gt;/dev/ttyACMx&amp;lt;/code&amp;gt; Arduino device, or screen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;screen /dev/ttyACM0 115200&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ArduinoSerialPinecube.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
==== Serial connection using pinephone/pinebook pro serial debugging cable ====&lt;br /&gt;
&lt;br /&gt;
You can use the [https://wiki.pine64.org/wiki/PinePhone#Serial_console serial console] USB cable for pinephone and pinebook pro at the [https://pine64.com/product/pinebook-pinephone-pinetab-serial-console/ store]. With a [https://www.amazon.com/3-5mm-Stereo-Female-terminal-connector/dp/B077XPSKQD female terminal block] wire using breadboard wire into the GPIO block at the following locations in a &amp;quot;null modem&amp;quot; configuration with transmit and receive crossed between your computer and the pinecube:&lt;br /&gt;
&lt;br /&gt;
 S - Ground (to pin 9)&lt;br /&gt;
 R - Transmit (to pin 8)&lt;br /&gt;
 T - Receive (to pin 10)&lt;br /&gt;
&lt;br /&gt;
From Linux you can access the console of the pinecube using the screen command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;screen /dev/ttyUSB0 115200&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Basic bandwidth tests with iperf3 ====&lt;br /&gt;
&lt;br /&gt;
Install armbian-config:&lt;br /&gt;
&amp;lt;code&amp;gt;apt install armbian-config&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enable iperf3 through the menu in armbian-config:&lt;br /&gt;
&amp;lt;code&amp;gt;armbian-config&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On a test computer on the same network segment run iperf3 as a client:&lt;br /&gt;
&amp;lt;code&amp;gt;iperf3 -c pinecube -t 60&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The same test computer, run iperf3 in the reverse direction:&lt;br /&gt;
&amp;lt;code&amp;gt;iperf3 -c pinecube -t 60 -R&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Performance results ===&lt;br /&gt;
&lt;br /&gt;
==== Wireless network performance ====&lt;br /&gt;
The performance results reflect using the wireless network. The link speed was 72.2Mb/s using 2.462Ghz wireless. Running sixty second iperf3 tests: the observed throughput varies between 28-50Mb/s to a host on the same network segment. The testing host is connected to an Ethernet switch which is also connected to a wireless bridge. The wireless network uses WPA2 and the PineCube is connected to this wireless network bridge.&lt;br /&gt;
&lt;br /&gt;
Client rate for sixty seconds:&lt;br /&gt;
&lt;br /&gt;
 [ ID] Interval           Transfer     Bitrate         Retr&lt;br /&gt;
 [  5]   0.00-60.00  sec   293 MBytes  41.0 Mbits/sec    1             sender&lt;br /&gt;
 [  5]   0.00-60.01  sec   291 MBytes  40.7 Mbits/sec                  receiver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Client rate with -R for sixty seconds:&lt;br /&gt;
&lt;br /&gt;
 [ ID] Interval           Transfer     Bitrate         Retr&lt;br /&gt;
 [  5]   0.00-60.85  sec   263 MBytes  36.2 Mbits/sec    3             sender&lt;br /&gt;
 [  5]   0.00-60.00  sec   259 MBytes  36.1 Mbits/sec                  receiver&lt;br /&gt;
&lt;br /&gt;
Using WireGuard to protect the traffic between the PineCube and the test system, the performance characteristics change only slightly.&lt;br /&gt;
&lt;br /&gt;
Client rate for sixty seconds with WireGuard:&lt;br /&gt;
&lt;br /&gt;
 [ ID] Interval           Transfer     Bitrate         Retr&lt;br /&gt;
 [  5]   0.00-60.00  sec   230 MBytes  32.1 Mbits/sec    0             sender&lt;br /&gt;
 [  5]   0.00-60.09  sec   229 MBytes  32.0 Mbits/sec                  receiver&lt;br /&gt;
&lt;br /&gt;
Client rate with -R for sixty seconds with WireGuard:&lt;br /&gt;
&lt;br /&gt;
 [ ID] Interval           Transfer     Bitrate         Retr&lt;br /&gt;
 [  5]   0.00-60.14  sec   246 MBytes  34.3 Mbits/sec    7             sender&lt;br /&gt;
 [  5]   0.00-60.00  sec   245 MBytes  34.2 Mbits/sec                  receiver&lt;br /&gt;
&lt;br /&gt;
====== Wired network performance ======&lt;br /&gt;
&lt;br /&gt;
The Ethernet network does not work in the current Ubuntu Focal Armbian image or the Ubuntu Groovy Armbian image.&lt;br /&gt;
&lt;br /&gt;
The performance results reflect using the Ethernet network. The link speed was 100Mb/s using a 1000Mb/s prosumer switch. Running sixty second iperf3 tests: the observed throughput varies between 92-102Mb/s to a host on the same network segment. The testing host is connected to the same Ethernet switch which is also connected to the PineCube.&lt;br /&gt;
&lt;br /&gt;
Client rate for sixty seconds:&lt;br /&gt;
&lt;br /&gt;
 [ ID] Interval           Transfer     Bitrate         Retr&lt;br /&gt;
 [  5]   0.00-60.00  sec   675 MBytes  94.4 Mbits/sec    0             sender&lt;br /&gt;
 [  5]   0.00-60.01  sec   673 MBytes  94.0 Mbits/sec                  receiver&lt;br /&gt;
&lt;br /&gt;
Client rate with -R for sixty seconds:&lt;br /&gt;
&lt;br /&gt;
 [ ID] Interval           Transfer     Bitrate         Retr&lt;br /&gt;
 [  5]   0.00-60.00  sec   673 MBytes  94.1 Mbits/sec    0             sender&lt;br /&gt;
 [  5]   0.00-60.00  sec   673 MBytes  94.1 Mbits/sec                  receiver&lt;br /&gt;
&lt;br /&gt;
Using WireGuard to protect the traffic between the PineCube and the test system, the performance characteristics change only slightly.&lt;br /&gt;
&lt;br /&gt;
Client rate for sixty seconds with WireGuard:&lt;br /&gt;
&lt;br /&gt;
 [ ID] Interval           Transfer     Bitrate         Retr&lt;br /&gt;
 [  5]   0.00-60.00  sec   510 MBytes  71.2 Mbits/sec    0             sender&lt;br /&gt;
 [  5]   0.00-60.01  sec   509 MBytes  71.1 Mbits/sec                  receiver&lt;br /&gt;
&lt;br /&gt;
Client rate with -R for sixty seconds with WireGuard:&lt;br /&gt;
&lt;br /&gt;
 [ ID] Interval           Transfer     Bitrate         Retr&lt;br /&gt;
 [  5]   0.00-60.01  sec   642 MBytes  89.8 Mbits/sec    0             sender&lt;br /&gt;
 [  5]   0.00-60.00  sec   641 MBytes  89.7 Mbits/sec                  receiver&lt;br /&gt;
&lt;br /&gt;
== Streaming the camera to the network ==&lt;br /&gt;
&lt;br /&gt;
In this section we document a variety of ways to stream video to the network from the PineCube. Unless specified otherwise, all of these examples have been tested on Ubuntu groovy (20.10). See [https://github.com/ioerror/pinecube this small project for the pinecube] for easy to use programs tuned for the PineCube.&lt;br /&gt;
&lt;br /&gt;
In the examples which use h264, we are currently encoding using the x264 library which is not very fast on this CPU. The SoC in the PineCube does have a hardware h264 encoder, which the authors of these examples have so far not tried to use. It appears that https://github.com/gtalusan/gst-plugin-cedar might provide easy access to it, however. Please update this wiki if you find out how to use the hardware encoder!&lt;br /&gt;
&lt;br /&gt;
=== gstreamer: h264 HLS ===&lt;br /&gt;
&lt;br /&gt;
HLS (HTTP Live Streaming) has the advantage that it is easy to play in any modern web browser, including Android and iPhone devices, and that it is easy to put an HTTP caching proxy in front of it to scale to many viewers. It has the disadvantages of adding (at minimum) several seconds of latency, and of requiring an h264 encoder (which we have in hardware, but haven't figured out how to use yet, so, we're stuck with the slow software one).&lt;br /&gt;
&lt;br /&gt;
HLS segments a video stream into small chunks which are stored as .ts (MPEG Transport Stream) files, and (re)writes a playlist.m3u8 file which clients constantly refresh to discover which .ts files they should download. We use a tmpfs file system to avoid needing to write these files to the sdcard in the PineCube. Besides the program which writes the .ts and .m3u8 files (gst-launch-1.0, in our case), we'll also need a very basic web page in tmpfs and a webserver to serve the files.&lt;br /&gt;
&lt;br /&gt;
Create an hls directory to be shared in the existing tmpfs file system that is mounted at /dev/shm:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mkdir /dev/shm/hls/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create an index.html and optionally a favicon.ico or even a set of icons, and then put the files into the /dev/shm/hls directory. An example index.html that works is available in the Getting Started section of the [https://github.com/video-dev/hls.js/#getting-started README] for [https://github.com/video-dev/hls.js/ hls.js]. We recommend downloading the hls.js file and editing the example index.html to serve your local copy of it instead of fetching it from a CDN. This file provides HLS playback capabilities in browsers which don't natively support it (which is most browsers aside from the iPhone).&lt;br /&gt;
&lt;br /&gt;
In one terminal, run the camera capture pipeline:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
cd /dev/shm/hls/ &amp;amp;&amp;amp; &lt;br /&gt;
media-ctl --set-v4l2 '&amp;quot;ov5640 1-003c&amp;quot;:0[fmt:UYVY8_2X8/240x320@1/15]' &amp;amp;&amp;amp; &lt;br /&gt;
gst-launch-1.0 v4l2src ! video/x-raw,width=320,height=240,format=UYVY,framerate=15/1 ! decodebin ! videoconvert ! video/x-raw,format=I420 ! clockoverlay ! timeoverlay valignment=bottom ! x264enc speed-preset=ultrafast tune=zerolatency ! mpegtsmux ! hlssink target-duration=1 playlist-length=2 max-files=3&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively it is possible to capture at a higher resolution:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
media-ctl --set-v4l2 '&amp;quot;ov5640 1-003c&amp;quot;:0[fmt:UYVY8_2X8/1920x1080@1/15]'&lt;br /&gt;
cd /dev/shm/hls/ &amp;amp;&amp;amp; gst-launch-1.0 v4l2src ! video/x-raw,width=1920,height=1080,format=UYVY,framerate=15/1 ! decodebin ! videoconvert ! video/x-raw,format=I420 ! clockoverlay ! timeoverlay valignment=bottom ! x264enc speed-preset=ultrafast tune=zerolatency ! mpegtsmux ! hlssink target-duration=1 playlist-length=2 max-files=3&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In another, run a simple single threaded webserver which will serve html, javascript, and HLS to web clients:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
cd /dev/shm/hls/ &amp;amp;&amp;amp; python3 -m http.server&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternately, install a more efficient web server (&amp;lt;code&amp;gt;apt install nginx&amp;lt;/code&amp;gt;) and set the server root for the default configuration to be /dev/shm/hls. This will run on port 80 rather than the python3 server which defaults to port 8000.&lt;br /&gt;
&lt;br /&gt;
It should be possible to view the HLS stream directly in a web browser by visiting [http://pinecube:8000/ http://pinecube:8000/] if pinecube is the correct hostname and the name correctly resolves.&lt;br /&gt;
&lt;br /&gt;
You can also view the HLS stream with VLC: &amp;lt;code&amp;gt;vlc http://pinecube:8000/playlist.m3u8&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or with gst-play-1.0: &amp;lt;code&amp;gt;gst-play-1.0 http://pinecube:8000/playlist.m3u8&amp;lt;/code&amp;gt; (or with mpv, ffplay, etc)&lt;br /&gt;
&lt;br /&gt;
To find out about other options you can configure in the &amp;lt;code&amp;gt;hlssink&amp;lt;/code&amp;gt; gstreamer element, you can run &amp;lt;code&amp;gt;gst-inspect-1.0 hlssink&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It is worth noting here that the &amp;lt;code&amp;gt;hlssink&amp;lt;/code&amp;gt; element in GStreamer is not widely used in production environments. It is handy for testing, but for real-world free-software HLS live streaming deployments the standard tool today (January 2021) is nginx's RTMP module which can be used with ffmpeg to produce &amp;quot;adaptive streams&amp;quot; which are reencoded at varying quality levels. You can send data to an nginx-rtmp server from a gstreamer pipeline using the &amp;lt;code&amp;gt;rtmpsink&amp;lt;/code&amp;gt; element. It is also worth noting that gstreamer has a new &amp;lt;code&amp;gt;hlssink2&amp;lt;/code&amp;gt; element which we have not tested; perhaps in the future it will even have a webserver!&lt;br /&gt;
&lt;br /&gt;
=== v4l2rtspserver: h264 RTSP ===&lt;br /&gt;
&lt;br /&gt;
Install dependencies:&lt;br /&gt;
&lt;br /&gt;
 apt install -y cmake gstreamer1.0-plugins-bad gstreamer1.0-tools \&lt;br /&gt;
 gstreamer1.0-plugins-good v4l-utils gstreamer1.0-alsa alsa-utils libpango1.0-0 \&lt;br /&gt;
 libpango1.0-dev gstreamer1.0-plugins-base gstreamer1.0-x x264 \&lt;br /&gt;
 gstreamer1.0-plugins-{good,bad,ugly} liblivemedia-dev liblog4cpp5-dev \&lt;br /&gt;
 libasound2-dev vlc libssl-dev iotop libasound2-dev  liblog4cpp5-dev \&lt;br /&gt;
 liblivemedia-dev autoconf automake libtool v4l2loopback-dkms liblog4cpp5-dev \&lt;br /&gt;
 libvpx-dev libx264-dev libjpeg-dev libx265-dev linux-headers-dev-sunxi;&lt;br /&gt;
&lt;br /&gt;
Install kernel source and build v4l2loopback module:&lt;br /&gt;
&lt;br /&gt;
  apt install linux-source-5.11.3-dev-sunxi64  #Adjust kernel version number to match current installation with &amp;quot;uname -r&amp;quot;&lt;br /&gt;
  cd /usr/src/v4l2loopback-0.12.3; make &amp;amp;&amp;amp; make install &amp;amp;&amp;amp; depmod -a&lt;br /&gt;
&lt;br /&gt;
Build required v4l2 software:&lt;br /&gt;
&lt;br /&gt;
 git clone --recursive https://github.com/mpromonet/v4l2tools &amp;amp;&amp;amp; cd v4l2tools &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install;&lt;br /&gt;
 git clone --recursive https://github.com/mpromonet/v4l2rtspserver &amp;amp;&amp;amp; cd v4l2rtspserver &amp;amp;&amp;amp; cmake -D LIVE555URL=https://download.videolan.org/pub/contrib/live555/live.2020.08.19.tar.gz . &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install;&lt;br /&gt;
&lt;br /&gt;
Running the camera:&lt;br /&gt;
 media-ctl --set-v4l2 '&amp;quot;ov5640 1-003c&amp;quot;:0[fmt:UYVY8_2X8/640x480@1/30]';&lt;br /&gt;
 modprobe v4l2loopback video_nr=10 debug=2;&lt;br /&gt;
 v4l2compress -fH264  -w -vv /dev/video0 /dev/video10 &amp;amp;&lt;br /&gt;
 v4l2rtspserver -v -S -W 640 -H 480 -F 10 -b /usr/local/share/v4l2rtspserver/ /dev/video10&lt;br /&gt;
&lt;br /&gt;
Note that you might get an error when running media-ctl indicating that the resource is busy. This could be because of the motion program that runs on the stock OS installation. Check and kill any running /usr/bin/motion processes before running the above steps.&lt;br /&gt;
&lt;br /&gt;
The v4l2compress/v4l2rtspserver method of streaming the camera uses around ~45-50% of the CPU for compression of the stream into H264 (640x480@7fps) and around 1-2% of the CPU for serving the HLS stream. Total system RAM used is roughly 64MB and the load average is ~0.4-~0.5 when idle, and ~0.51-~0.60 with one HLS client streaming the camera.&lt;br /&gt;
&lt;br /&gt;
You'll probably see about a 2-3s lag with this approach, possibly due to the H264 compression and the lack of hardware acceleration at the moment.&lt;br /&gt;
&lt;br /&gt;
=== gstreamer: JPEG RTSP ===&lt;br /&gt;
&lt;br /&gt;
GStreamer's RTSP server isn't an element you can use with gst-launch, but rather a library. We failed to build its example program, so instead used this very small 3rd party tool which is based on it: https://github.com/sfalexrog/gst-rtsp-launch/&lt;br /&gt;
&lt;br /&gt;
After building gst-rtsp-launch (which is relatively simple on Ubuntu groovy; just &amp;lt;code&amp;gt;apt install libgstreamer1.0-dev libgstrtspserver-1.0-dev&amp;lt;/code&amp;gt; first), you can read JPEG data directly from the camera and stream it via RTSP: &amp;lt;code&amp;gt;media-ctl --set-v4l2 '&amp;quot;ov5640 1-003c&amp;quot;:0[fmt:JPEG_1X8/1280x720]' &amp;amp;&amp;amp; gst-rtsp-launch 'v4l2src ! image/jpeg,width=1280,height=720 ! rtpjpegpay name=pay0'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This stream can be played using &amp;lt;code&amp;gt;vlc rtsp://pinecube.local:8554/video&amp;lt;/code&amp;gt; or mpv, ffmpeg, gst-play-1.0, etc. If you increase the resolution to 1920x1080, mpv and gst-play can still play it, but VLC will complain &amp;lt;code&amp;gt;The total received frame size exceeds the client's buffer size (2000000).  73602 bytes of trailing data will be dropped!&amp;lt;/code&amp;gt; if you don't tell it to increase its buffer size with &amp;lt;code&amp;gt;--rtsp-frame-buffer-size=300000&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== gstreamer: h264 RTSP ===&lt;br /&gt;
&lt;br /&gt;
Left as an exercise to the reader (please update the wiki). Hint: involves bits from the HLS and the JPEG RTSP examples above, but needs a &amp;lt;code&amp;gt;rtph264pay name=pay0&amp;lt;/code&amp;gt; element.&lt;br /&gt;
&lt;br /&gt;
=== gstreamer: JPEG RTP UDP ===&lt;br /&gt;
&lt;br /&gt;
Configure camera: &amp;lt;code&amp;gt;media-ctl --set-v4l2 '&amp;quot;ov5640 1-003c&amp;quot;:0[fmt:JPEG_1X8/1920x1080]'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Transmit with: &amp;lt;code&amp;gt;gst-launch-1.0 v4l2src ! image/jpeg,width=1920,height=1080 ! rtpjpegpay name=pay0 ! udpsink host=$client_ip port=8000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Receive with: &amp;lt;code&amp;gt;gst-launch-1.0 udpsrc port=8000 !  application/x-rtp, encoding-name=JPEG,payload=26 !  rtpjpegdepay !  jpegdec !  autovideosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the sender must specify the recipient's IP address in place of &amp;lt;code&amp;gt;$client_ip&amp;lt;/code&amp;gt;; this can actually be a multicast address allowing for many receivers! (You'll need to specify a valid multicast address in the receivers' pipeline also; see &amp;lt;code&amp;gt;gst-inspect-1.0 udpsrc&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;gst-inspect-1.0 udpsink&amp;lt;/code&amp;gt; for details.)&lt;br /&gt;
&lt;br /&gt;
=== gstreamer: JPEG RTP TCP ===&lt;br /&gt;
&lt;br /&gt;
Configure camera: &amp;lt;code&amp;gt;media-ctl --set-v4l2 '&amp;quot;ov5640 1-003c&amp;quot;:0[fmt:JPEG_1X8/1920x1080]'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Transmit with: &amp;lt;code&amp;gt;gst-launch-1.0 v4l2src ! image/jpeg,width=1920,height=1080 ! rtpjpegpay name=pay0 ! rtpstreampay ! tcpserversink host=0.0.0.0 port=1234&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Receive with: &amp;lt;code&amp;gt;gst-launch-1.0 tcpclientsrc host=pinecube.local port=1234 ! application/x-rtp-stream,encoding-name=JPEG ! rtpstreamdepay ! application/x-rtp, media=video, encoding-name=JPEG ! rtpjpegdepay !  jpegdec !  autovideosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== gstreamer and socat: MJPEG HTTP server ===&lt;br /&gt;
&lt;br /&gt;
This rather ridiculous method uses bash, socat, and gstreamer to implement an HTTP-ish server which will serve your video as an MJPEG stream which is playable in browsers.&lt;br /&gt;
&lt;br /&gt;
This approach has the advantage of being relatively low latency (under a second), browser-compatible, and not needing to reencode anything on the CPU (it gets JPEG data from the camera itself). Compared to HLS, it has the disadvantages that MJPEG requires more bandwidth than h264 for similar quality, pause and seek are not possible, stalled connections cannot jump ahead when they are unstalled, and, in the case of this primitive implementation, it only supports one viewer at a time. (Though, really, the RTSP examples on this page perform very poorly with multiple viewers, so...)&lt;br /&gt;
&lt;br /&gt;
Gstreamer can almost do this by itself, as it has a multipartmux element which produces the headers which precede each frame. But sadly, despite various forum posts lamenting the lack of one over the last 12+ years, as of the end of the 50th year of the UNIX era (aka 2020), somehow nobody has yet gotten a webserver element merged in to gstreamer (which is necessary to produce the HTTP response, which is required for browsers other than firefox to play it). So, here is an absolutely minimal &amp;quot;webserver&amp;quot; which will get MJPEG displaying in a (single) browser.&lt;br /&gt;
&lt;br /&gt;
Create a file called &amp;lt;code&amp;gt;mjpeg-response.sh&amp;lt;/code&amp;gt;:&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 media-ctl --set-v4l2 '&amp;quot;ov5640 1-003c&amp;quot;:0[fmt:JPEG_1X8/1920x1080]'&lt;br /&gt;
 b=&amp;quot;--duct_tape_boundary&amp;quot;&lt;br /&gt;
 echo -en &amp;quot;HTTP/1.1 200 OK\r\nContent-type: multipart/x-mixed-replace;boundary=$b\r\n\r\n&amp;quot;&lt;br /&gt;
 gst-launch-1.0 v4l2src ! image/jpeg,width=1920,height=1080 ! multipartmux boundary=$b ! fdsink fd=2 2&amp;gt;&amp;amp;1 &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
Make it executable: &amp;lt;code&amp;gt;chmod +x mjpeg-response.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run the server: &amp;lt;code&amp;gt;socat TCP-LISTEN:8080,reuseaddr,fork EXEC:./mjpeg-response.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And browse to http://pinecube.local:8080/ in your browser.&lt;br /&gt;
&lt;br /&gt;
=== virtual web camera: gstreamer, mjpeg, udp rtp unicast ===&lt;br /&gt;
&lt;br /&gt;
It's possible to set up the pinecube as a virtual camera video device (Video 4 Linux) so that you can use it with video conferencing software, such as Jitsi Meet. Note that this has fairly minimal (&amp;lt;1s) lag when tested on a wired 1Gb ethernet network connection and the frame rate is passable. MJPEG is very wasteful in terms of network resources, so this is something to keep in mind. The following instructions assume Debian Linux (Bullseye) as your desktop machine, but could work with other Linux OSes too. It's possible that someday a similar system could work with Mac OS X provided that someone writes a gstreamer plugin that exposes a Mac OS Core Media DAL device as a virtual webcam, like they did [https://github.com/johnboiles/obs-mac-virtualcam here] for OBS.&lt;br /&gt;
&lt;br /&gt;
First, you will need to set up the pinecube with gstreamer much like the above gstreamer, but in 1280x720 resolution. Also, you will be streaming to the desktop machine using UDP, with IP address represented by $desktop below at UDP port 8000.&lt;br /&gt;
&lt;br /&gt;
 media-ctl --set-v4l2 '&amp;quot;ov5640 1-003c&amp;quot;:0[fmt:JPEG_1X8/1280x720]'&lt;br /&gt;
 gst-launch-1.0 v4l2src device=/dev/video0 ! image/jpeg,width=1280,height=720,framerate=30/1 ! rtpjpegpay name=pay0 ! udpsink host=$desktop port=8000&lt;br /&gt;
&lt;br /&gt;
On your desktop machine, you will need to install the gstreamer suite and the special v4l2loopback kernel module to bring the mjpeg stream to the Video 4 Linux device /dev/video10.&lt;br /&gt;
&lt;br /&gt;
 sudo apt install gstreamer1.0-tools gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly v4l2loopback-dkms&lt;br /&gt;
 sudo modprobe v4l2loopback video_nr=10 max_buffers=32 exclusive_caps=1 # Creates /dev/video10 as a virtual v4l2 device, allocates increased buffers and exposes exclusive capabilities for chromium to find the video device&lt;br /&gt;
 gst-launch-1.0 udpsrc port=8000 ! application/x-rtp, encoding-name=JPEG,payload=26,framerate=30/1 ! rtpjpegdepay ! jpegdec ! video/x-raw, format=I420, width=1280, height=720 ! autovideoconvert ! v4l2sink device=/dev/video10&lt;br /&gt;
&lt;br /&gt;
The most common error found when launching the gstreamer pipeline above is the following error message, which seems to happen when the [https://github.com/umlaeute/v4l2loopback/issues/174 max_buffers aren't set] on the v4l2loopback module (see above), or if there is a v4l client (vlc, chromium) already connected to /dev/video10 when starting the pipeline. There does seem to be a small level of instability in this stack that could be improved.&lt;br /&gt;
&lt;br /&gt;
 gstbasesrc.c(3055): gst_base_src_loop (): /GstPipeline:pipeline0/GstUDPSrc:udpsrc0:&lt;br /&gt;
 streaming stopped, reason not-negotiated (-4)&lt;br /&gt;
&lt;br /&gt;
Now that you have /dev/video10 hooked into the gstreamer pipeline you can then connect to it using VLC. VLC is a good local test that things are working. You can view the stream like this. Note that you could do the same thing with mpv/ffmpeg, but there are [https://www.raspberrypi.org/forums/viewtopic.php?t=270023 problems] currently.&lt;br /&gt;
&lt;br /&gt;
 vlc v4l2:///dev/video10&lt;br /&gt;
&lt;br /&gt;
Be sure to disconnect vlc before trying to use the virtual web camera with chromium. Launch chromium and go to a web conference like [https://meet.jit.si jitsi]. When it prompts you for the camera pick the &amp;quot;Dummy Video Device...&amp;quot; and it should be much like what you see in vlc. Note that firefox isn't really working at this moment and the symptoms appear very similar to the problem with mpv/ffmpeg mentioned above, ie. when they connect to the camera they show only the first frame and then drop. It's unclear whether the bug is in gstreamer, v4l, or ffmpeg (or somewhere in these instructions).&lt;br /&gt;
&lt;br /&gt;
== Debugging camera issues with the gstreamer pipeline ==&lt;br /&gt;
&lt;br /&gt;
If the camera does not appear to work, it is possible to change the &amp;lt;code&amp;gt;v4l2src&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;videotestsrc&amp;lt;/code&amp;gt; and the gstreamer pipeline will produce a synthetic test image without using the camera hardware.&lt;br /&gt;
&lt;br /&gt;
If the camera is only sensor noise lines over a black or white image, the camera may be in a broken state. When in that state, the following kernel messages were observed:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ 1703.577304] alloc_contig_range: [46100, 464f5) PFNs busy&lt;br /&gt;
[ 1703.578570] alloc_contig_range: [46200, 465f5) PFNs busy&lt;br /&gt;
[ 1703.596924] alloc_contig_range: [46300, 466f5) PFNs busy&lt;br /&gt;
[ 1703.598060] alloc_contig_range: [46400, 467f5) PFNs busy&lt;br /&gt;
[ 1703.600480] alloc_contig_range: [46400, 468f5) PFNs busy&lt;br /&gt;
[ 1703.601654] alloc_contig_range: [46600, 469f5) PFNs busy&lt;br /&gt;
[ 1703.619165] alloc_contig_range: [46100, 464f5) PFNs busy&lt;br /&gt;
[ 1703.619528] alloc_contig_range: [46200, 465f5) PFNs busy&lt;br /&gt;
[ 1703.619857] alloc_contig_range: [46300, 466f5) PFNs busy&lt;br /&gt;
[ 1703.641156] alloc_contig_range: [46100, 464f5) PFNs busy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SDK ==&lt;br /&gt;
&lt;br /&gt;
==== Stock Linux ====&lt;br /&gt;
* [https://files.pine64.org/SDK/PineCube/PineCube%20Stock%20BSP-SDK%20ver1.0.7z Direct Download from pine64.org]&lt;br /&gt;
** MD5 (7zip file): efac108dc98efa0a1f5e77660ba375f8&lt;br /&gt;
** File Size: 3.50GB&lt;br /&gt;
===== How to compile =====&lt;br /&gt;
&lt;br /&gt;
You can either setup a machine for the build environment, or use a Vagrant virtual machine provided by [https://elimo.io Elimo Engineering]&lt;br /&gt;
&lt;br /&gt;
====== On a dedicated machine ======&lt;br /&gt;
&lt;br /&gt;
Recommended system requirements:&lt;br /&gt;
* OS: (L)Ubuntu 16.04&lt;br /&gt;
* CPU: 64-bit based&lt;br /&gt;
* Memory: 8 GB or higher&lt;br /&gt;
* Disk: 15 GB free hard disk space&lt;br /&gt;
&lt;br /&gt;
'''Install required packages'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install p7zip-full git make u-boot-tools libxml2-utils bison build-essential gcc-arm-linux-gnueabi g++-arm-linux-gnueabi zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32z1-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Install older Make 3.82 and Java JDK 6'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pushd /tmp&lt;br /&gt;
wget https://ftp.gnu.org/gnu/make/make-3.82.tar.gz&lt;br /&gt;
tar xfv make-3.82.tar.gz&lt;br /&gt;
cd make-3.82&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
sudo apt purge -y make&lt;br /&gt;
sudo ./make install&lt;br /&gt;
cd ..&lt;br /&gt;
# Please, download jdk-6u45-linux-x64.bin from https://www.oracle.com/java/technologies/javase-java-archive-javase6-downloads.html (requires free login)&lt;br /&gt;
chmod +x jdk-6u45-linux-x64.bin &lt;br /&gt;
./jdk-6u45-linux-x64.bin &lt;br /&gt;
sudo mkdir /opt/java/&lt;br /&gt;
sudo mv jdk1.6.0_45/ /opt/java/&lt;br /&gt;
sudo update-alternatives --install /usr/bin/javac javac /opt/java/jdk1.6.0_45/bin/javac 1&lt;br /&gt;
sudo update-alternatives --install /usr/bin/java java /opt/java/jdk1.6.0_45/bin/java 1&lt;br /&gt;
sudo update-alternatives --install /usr/bin/javaws javaws /opt/java/jdk1.6.0_45/bin/javaws 1&lt;br /&gt;
sudo update-alternatives --config javac&lt;br /&gt;
sudo update-alternatives --config java&lt;br /&gt;
sudo update-alternatives --config javaws&lt;br /&gt;
popd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Unpack SDK and then compile and pack the image'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
7z x 'PineCube Stock BSP-SDK ver1.0.7z'&lt;br /&gt;
mv 'PineCube Stock BSP-SDK ver1.0' pinecube-sdk&lt;br /&gt;
cd pinecube-sdk/camdroid&lt;br /&gt;
source build/envsetup.sh&lt;br /&gt;
lunch&lt;br /&gt;
mklichee&lt;br /&gt;
make -j3&lt;br /&gt;
pack&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== Using Vagrant ======&lt;br /&gt;
&lt;br /&gt;
You can avoid setting up your machine and just use Vagrant to spin up a development environment in a VM.&lt;br /&gt;
&lt;br /&gt;
Just clone the [https://github.com/elimo-engineering/pinecube-sdk-vagrant Elimo Engineering repo] and follow the instructions in the [https://github.com/elimo-engineering/pinecube-sdk-vagrant/blob/main/README.md readme file]&lt;br /&gt;
&lt;br /&gt;
After spinning up the VM, you just need to run the build:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd pinecube-sdk/camdroid&lt;br /&gt;
source build/envsetup.sh&lt;br /&gt;
lunch&lt;br /&gt;
mklichee&lt;br /&gt;
make -j3&lt;br /&gt;
pack&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Community Projects ==&lt;br /&gt;
&lt;br /&gt;
Share your project with a PineCube here!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:PineCube]] [[Category:Allwinner(Sochip) S3]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineCube&amp;diff=9611</id>
		<title>PineCube</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineCube&amp;diff=9611"/>
		<updated>2021-03-27T14:31:33Z</updated>

		<summary type="html">&lt;p&gt;Avamander: /* Specifications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{note|1=PAGE UNDER CONSTRUCTION, INFO SUBJECT TO CHANGE}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Specifications ==&lt;br /&gt;
* '''Dimensions:''' 55mm x 51mm x 51.5mm&lt;br /&gt;
* '''Weight:''' 55g&lt;br /&gt;
* '''Storage:'''&lt;br /&gt;
** MicroSD slot, bootable&lt;br /&gt;
** 128Mb SPI Nor Flash, bootable&lt;br /&gt;
* '''Cameras:''' OV5640, 5Mpx &lt;br /&gt;
* '''CPU:''' Allwinner(Sochip) ARM Cortex-A7 MPCore, 800MHz&lt;br /&gt;
* '''RAM:''' 128MB DDR3&lt;br /&gt;
* '''I/O:'''&lt;br /&gt;
** 10/100Mbps Ethernet with passive PoE (**4-18V!**)&lt;br /&gt;
** USB 2.0 A host&lt;br /&gt;
** 26 pins GPIO port&lt;br /&gt;
*** 2x 3.3V Ouptut&lt;br /&gt;
*** 2x 5V Output&lt;br /&gt;
*** 1x I2C&lt;br /&gt;
*** 2x UART&lt;br /&gt;
*** 2x PWM&lt;br /&gt;
*** 1x SPI&lt;br /&gt;
*** 1x eMMC/SDIO/SD (8-bit)&lt;br /&gt;
*** 6x Interrupts&lt;br /&gt;
*** '''Note: Interfaces are multiplexed, so they can't be all used at same time'''&lt;br /&gt;
** Internal microphone&lt;br /&gt;
* '''Network:'''&lt;br /&gt;
** WiFi&lt;br /&gt;
* '''Screen:''' optional 4.5&amp;quot; RGB LCD screen&lt;br /&gt;
* '''Misc. features:''' &lt;br /&gt;
** Volume and home buttons&lt;br /&gt;
** Speakers and Microphone&lt;br /&gt;
* '''Power DC in:'''&lt;br /&gt;
** 5V 1A from MicroUSB Port or GPIO port&lt;br /&gt;
** 4V-18V from Ethernet passive PoE&lt;br /&gt;
* '''Battery:''' optional 950-1600mAh model: 903048 Lithium Polymer Ion Battery Pack, can be purchase at [https://www.amazon.com/AKZYTUE-1200mAh-Battery-Rechargeable-Connector/dp/B07TWHHCNK/ Amazon.com]&lt;br /&gt;
&lt;br /&gt;
== PineCube board information, schematics and certifications ==&lt;br /&gt;
* PineCube mainboard schematic:&lt;br /&gt;
** [https://files.pine64.org/doc/PineCube/PineCube%20MainBoard%20Schematic%20ver%201.0-20200727.pdf PineCube mainboard Released Schematic ver 1.0]&lt;br /&gt;
* PineCube faceboard schematic:&lt;br /&gt;
** [https://files.pine64.org/doc/PineCube/PineCube%20FaceBoard%20Schematic%20ver%201.0-20200727.pdf PineCube faceboard Released Schematic ver 1.0]&lt;br /&gt;
* PineCube certifications:&lt;br /&gt;
** [https://files.pine64.org/doc/cert/PineCube-FCC-SDOC%20certification%20S20072502302001.pdf PineCube FCC Certificate]&lt;br /&gt;
** [https://files.pine64.org/doc/cert/PineCube-CE-EMC%20certification%20S20072502301001.pdf PineCube CE RED Certificate]&lt;br /&gt;
** [https://files.pine64.org/doc/cert/PineCube-ROHS%20Test%20Report.pdf PineCube ROHS Test Report]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Datasheets for components and peripherals ==&lt;br /&gt;
* Allwinner (Sochip) S3 SoC information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinecube/S3_Datasheet_V1.1-20180123.pdf Sochip S3 SoC Data Sheet V1.1]&lt;br /&gt;
&lt;br /&gt;
* X-Powers AXP209 PMU (Power Management Unit) information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinecube/AXP209_Datasheet_v1.0en.pdf AXP209 PMIC datasheet]&lt;br /&gt;
&lt;br /&gt;
* CMOS camera module information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinecube/CH-5A-DV-V2.0%20Specification.pdf PineCube Camera Module Specification]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinephone/OV5640_datasheet.pdf OV5640 5MP CMOS Image Sensor SoC datasheet]&lt;br /&gt;
&lt;br /&gt;
* LCD touch screen panel information:&lt;br /&gt;
&lt;br /&gt;
* Lithium battery information:&lt;br /&gt;
&lt;br /&gt;
* WiFi/BT module information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pinecube/rtl8189es.pdf RTL8189ES specification]&lt;br /&gt;
&lt;br /&gt;
* GPIO Header Pinout: ([[:File:PineCube_GPIO.pdf|PDF]], [https://pine64.gami.ee/pinecube/gpio-pinout.html HTML]) (Pin1 is marked on the board by a white dot on the PCB)&lt;br /&gt;
[[File:PineCube_GPIO_Pinout.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Case information:&lt;br /&gt;
** [https://files.pine64.org/doc/PineCube/PineCube%20Case%203D.zip PinePhone 3D file]&lt;br /&gt;
&lt;br /&gt;
[[File:PineCube_Case-1.jpg|400px]]  [[File:PineCube_Case-2.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
== Operating Systems ==&lt;br /&gt;
&lt;br /&gt;
=== Mainlining Efforts ===&lt;br /&gt;
&lt;br /&gt;
Please note:&lt;br /&gt;
&lt;br /&gt;
* this list is most likely not complete&lt;br /&gt;
* no review of functionality is done here, it only serves as a collection of efforts&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Linux kernel&lt;br /&gt;
|-&lt;br /&gt;
| Type&lt;br /&gt;
| Link&lt;br /&gt;
| Available in version&lt;br /&gt;
|-&lt;br /&gt;
| Devicetree Entry Pinecube&lt;br /&gt;
| https://lkml.org/lkml/2020/9/22/1241&lt;br /&gt;
| 5.10&lt;br /&gt;
|-&lt;br /&gt;
| Correction for AXP209 driver&lt;br /&gt;
| https://lkml.org/lkml/2020/9/22/1243&lt;br /&gt;
| 5.9&lt;br /&gt;
|-&lt;br /&gt;
| Additional Fixes for AXP209 driver&lt;br /&gt;
| https://lore.kernel.org/lkml/20201031182137.1879521-8-contact@paulk.fr/&lt;br /&gt;
| tdb (5.11?)&lt;br /&gt;
|-&lt;br /&gt;
| Device Tree Fixes&lt;br /&gt;
| https://lore.kernel.org/lkml/20201003234842.1121077-1-icenowy@aosc.io/&lt;br /&gt;
| 5.10&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|U-boot&lt;br /&gt;
|-&lt;br /&gt;
| Type&lt;br /&gt;
| Link&lt;br /&gt;
| Available in version&lt;br /&gt;
|-&lt;br /&gt;
| PineCube Board Support&lt;br /&gt;
| https://patchwork.ozlabs.org/project/uboot/list/?series=210044&lt;br /&gt;
| expected in v2021.01&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|Buildroot&lt;br /&gt;
|-&lt;br /&gt;
| No known mainlining efforts yet&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== NixOS ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/danielfullmer/pinecube-nixos danielfullmer's Github]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Buildroot ===&lt;br /&gt;
[https://elimo.io Elimo Engineering] integrated support for the PineCube into Buildroot.&lt;br /&gt;
&lt;br /&gt;
This has not been merged into upstream Buildroot yet, but you can find the repo on [https://github.com/elimo-engineering/buildroot Elimo's GitHub account] and build instructions in the [https://github.com/elimo-engineering/buildroot/tree/pine64/pinecube/board/pine64/pinecube board support directory] readme.&lt;br /&gt;
The most important thing that this provides is support for the S3's DDR3 in u-boot. Unfortunately mainline u-boot does not have that yet, but the u-boot patches from [https://github.com/danielfullmer/pinecube-nixos Daniel Fullmer's NixOS repo] were easy enough to use on buildroot.&lt;br /&gt;
This should get you a functional system that boots to a console on UART0. It's pretty fast too, getting there in 1.5 seconds from u-boot to login prompt.&lt;br /&gt;
&lt;br /&gt;
=== Armbian ===&lt;br /&gt;
&lt;br /&gt;
The only Armbian release with support for Ethernet and the camera module is the Ubuntu Groovy release. The Ubuntu Groovy release is an experimental, automatically generated release and it appears to support additional hardware from the other Armbian releases.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Armbian Build Image with motion [microSD Boot] [20201222] ====&lt;br /&gt;
* Armbian Ubuntu Focal build for the Pinecube with the motion (detection) package preinstalled.&lt;br /&gt;
* There are 2 ways to interact with the OS:&lt;br /&gt;
** Scan for the the device IP (with hostname pinecube)&lt;br /&gt;
** Use the PINE64 USB SERIAL CONSOLE/PROGRAMMER to login to the serial console, then check for assigned IP&lt;br /&gt;
* DD image (for 8GB micoSD card and above)&lt;br /&gt;
** [https://files.pine64.org//os/PineCube/armbian/Armbian_21.02.0-trunk_Pinecube_focal_dev_5.10.0.img.xz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (XZip file): 61e5a6d3ab0f74ce8367c97b7f8cbb7b&lt;br /&gt;
*** File Size: 328MGB&lt;br /&gt;
&lt;br /&gt;
[https://gist.github.com/Icenowy/ff68f6e4ba8231380d3a295226e63fb3 GitHub gist] for the userpatch which pre-installs and configures the motion (detection) package. &lt;br /&gt;
&lt;br /&gt;
Armbian Builds for PineCube are [https://www.armbian.com/pinecube/ available for download], once again thanks to [https://github.com/armbian/build/pull/2364/files the work] of Icenowy Zheng.&lt;br /&gt;
Although [https://www.armbian.com/download/?device_support=No+official+support+(CSC) not officially supported] it enables the usage of Debian and Ubuntu.&lt;br /&gt;
&lt;br /&gt;
A serial console can be established with 152008N1 (no hardware flow control). Login credentials are as usual in Armbian (login: root, password: 1234).&lt;br /&gt;
&lt;br /&gt;
Motion daemon can be enabled using systemctl (With root) &amp;lt;code&amp;gt;systemctl enable motion&amp;lt;/code&amp;gt;. Then just reboot.&lt;br /&gt;
&lt;br /&gt;
==== Serial connection using screen and the woodpecker USB serial device ====&lt;br /&gt;
&lt;br /&gt;
First connect the woodpecker USB serial device to the PineCube. Pin 1 on the PineCube has a small white dot on the PCB - this should be directly next to the microusb power connection. Attach the GND pin on the woodpecker to pin 6 (GND) on the PineCube, TXD from the woodpecker to pin 10 (UART_RXD) on the PineCube, and RXD from the woodpecker to pin 8 (UART_TXD) on the PineCube.&lt;br /&gt;
&lt;br /&gt;
On the host system which has the woodpecker USB serial device attached, it is possible to run screen and to communicate directly with the PineCube:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;screen /dev/ttyUSB0 115200&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Serial connection using screen and Arduino Uno ====&lt;br /&gt;
&lt;br /&gt;
You can use the Arduino Uno or other Arduino boards as a USB serial device.&lt;br /&gt;
&lt;br /&gt;
First you must either remove the microcontroller from it's socket, or if your Arduino board does not allow this, then you can use wires to jump RESET (RST) and GND to isolate the SOC.&lt;br /&gt;
&lt;br /&gt;
After this you can either use the Arduino IDE and it's Serial monitor after selecting your &amp;lt;code&amp;gt;/dev/ttyACMx&amp;lt;/code&amp;gt; Arduino device, or screen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;screen /dev/ttyACM0 115200&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ArduinoSerialPinecube.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
==== Serial connection using pinephone/pinebook pro serial debugging cable ====&lt;br /&gt;
&lt;br /&gt;
You can use the [https://wiki.pine64.org/wiki/PinePhone#Serial_console serial console] USB cable for pinephone and pinebook pro at the [https://pine64.com/product/pinebook-pinephone-pinetab-serial-console/ store]. With a [https://www.amazon.com/3-5mm-Stereo-Female-terminal-connector/dp/B077XPSKQD female terminal block] wire using breadboard wire into the GPIO block at the following locations in a &amp;quot;null modem&amp;quot; configuration with transmit and receive crossed between your computer and the pinecube:&lt;br /&gt;
&lt;br /&gt;
 S - Ground (to pin 9)&lt;br /&gt;
 R - Transmit (to pin 8)&lt;br /&gt;
 T - Receive (to pin 10)&lt;br /&gt;
&lt;br /&gt;
From Linux you can access the console of the pinecube using the screen command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;screen /dev/ttyUSB0 115200&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Basic bandwidth tests with iperf3 ====&lt;br /&gt;
&lt;br /&gt;
Install armbian-config:&lt;br /&gt;
&amp;lt;code&amp;gt;apt install armbian-config&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enable iperf3 through the menu in armbian-config:&lt;br /&gt;
&amp;lt;code&amp;gt;armbian-config&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On a test computer on the same network segment run iperf3 as a client:&lt;br /&gt;
&amp;lt;code&amp;gt;iperf3 -c pinecube -t 60&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The same test computer, run iperf3 in the reverse direction:&lt;br /&gt;
&amp;lt;code&amp;gt;iperf3 -c pinecube -t 60 -R&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Performance results ===&lt;br /&gt;
&lt;br /&gt;
==== Wireless network performance ====&lt;br /&gt;
The performance results reflect using the wireless network. The link speed was 72.2Mb/s using 2.462Ghz wireless. Running sixty second iperf3 tests: the observed throughput varies between 28-50Mb/s to a host on the same network segment. The testing host is connected to an Ethernet switch which is also connected to a wireless bridge. The wireless network uses WPA2 and the PineCube is connected to this wireless network bridge.&lt;br /&gt;
&lt;br /&gt;
Client rate for sixty seconds:&lt;br /&gt;
&lt;br /&gt;
 [ ID] Interval           Transfer     Bitrate         Retr&lt;br /&gt;
 [  5]   0.00-60.00  sec   293 MBytes  41.0 Mbits/sec    1             sender&lt;br /&gt;
 [  5]   0.00-60.01  sec   291 MBytes  40.7 Mbits/sec                  receiver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Client rate with -R for sixty seconds:&lt;br /&gt;
&lt;br /&gt;
 [ ID] Interval           Transfer     Bitrate         Retr&lt;br /&gt;
 [  5]   0.00-60.85  sec   263 MBytes  36.2 Mbits/sec    3             sender&lt;br /&gt;
 [  5]   0.00-60.00  sec   259 MBytes  36.1 Mbits/sec                  receiver&lt;br /&gt;
&lt;br /&gt;
Using WireGuard to protect the traffic between the PineCube and the test system, the performance characteristics change only slightly.&lt;br /&gt;
&lt;br /&gt;
Client rate for sixty seconds with WireGuard:&lt;br /&gt;
&lt;br /&gt;
 [ ID] Interval           Transfer     Bitrate         Retr&lt;br /&gt;
 [  5]   0.00-60.00  sec   230 MBytes  32.1 Mbits/sec    0             sender&lt;br /&gt;
 [  5]   0.00-60.09  sec   229 MBytes  32.0 Mbits/sec                  receiver&lt;br /&gt;
&lt;br /&gt;
Client rate with -R for sixty seconds with WireGuard:&lt;br /&gt;
&lt;br /&gt;
 [ ID] Interval           Transfer     Bitrate         Retr&lt;br /&gt;
 [  5]   0.00-60.14  sec   246 MBytes  34.3 Mbits/sec    7             sender&lt;br /&gt;
 [  5]   0.00-60.00  sec   245 MBytes  34.2 Mbits/sec                  receiver&lt;br /&gt;
&lt;br /&gt;
====== Wired network performance ======&lt;br /&gt;
&lt;br /&gt;
The Ethernet network does not work in the current Ubuntu Focal Armbian image or the Ubuntu Groovy Armbian image.&lt;br /&gt;
&lt;br /&gt;
The performance results reflect using the Ethernet network. The link speed was 100Mb/s using a 1000Mb/s prosumer switch. Running sixty second iperf3 tests: the observed throughput varies between 92-102Mb/s to a host on the same network segment. The testing host is connected to the same Ethernet switch which is also connected to the PineCube.&lt;br /&gt;
&lt;br /&gt;
Client rate for sixty seconds:&lt;br /&gt;
&lt;br /&gt;
 [ ID] Interval           Transfer     Bitrate         Retr&lt;br /&gt;
 [  5]   0.00-60.00  sec   675 MBytes  94.4 Mbits/sec    0             sender&lt;br /&gt;
 [  5]   0.00-60.01  sec   673 MBytes  94.0 Mbits/sec                  receiver&lt;br /&gt;
&lt;br /&gt;
Client rate with -R for sixty seconds:&lt;br /&gt;
&lt;br /&gt;
 [ ID] Interval           Transfer     Bitrate         Retr&lt;br /&gt;
 [  5]   0.00-60.00  sec   673 MBytes  94.1 Mbits/sec    0             sender&lt;br /&gt;
 [  5]   0.00-60.00  sec   673 MBytes  94.1 Mbits/sec                  receiver&lt;br /&gt;
&lt;br /&gt;
Using WireGuard to protect the traffic between the PineCube and the test system, the performance characteristics change only slightly.&lt;br /&gt;
&lt;br /&gt;
Client rate for sixty seconds with WireGuard:&lt;br /&gt;
&lt;br /&gt;
 [ ID] Interval           Transfer     Bitrate         Retr&lt;br /&gt;
 [  5]   0.00-60.00  sec   510 MBytes  71.2 Mbits/sec    0             sender&lt;br /&gt;
 [  5]   0.00-60.01  sec   509 MBytes  71.1 Mbits/sec                  receiver&lt;br /&gt;
&lt;br /&gt;
Client rate with -R for sixty seconds with WireGuard:&lt;br /&gt;
&lt;br /&gt;
 [ ID] Interval           Transfer     Bitrate         Retr&lt;br /&gt;
 [  5]   0.00-60.01  sec   642 MBytes  89.8 Mbits/sec    0             sender&lt;br /&gt;
 [  5]   0.00-60.00  sec   641 MBytes  89.7 Mbits/sec                  receiver&lt;br /&gt;
&lt;br /&gt;
== Streaming the camera to the network ==&lt;br /&gt;
&lt;br /&gt;
In this section we document a variety of ways to stream video to the network from the PineCube. Unless specified otherwise, all of these examples have been tested on Ubuntu groovy (20.10). See [https://github.com/ioerror/pinecube this small project for the pinecube] for easy to use programs tuned for the PineCube.&lt;br /&gt;
&lt;br /&gt;
In the examples which use h264, we are currently encoding using the x264 library which is not very fast on this CPU. The SoC in the PineCube does have a hardware h264 encoder, which the authors of these examples have so far not tried to use. It appears that https://github.com/gtalusan/gst-plugin-cedar might provide easy access to it, however. Please update this wiki if you find out how to use the hardware encoder!&lt;br /&gt;
&lt;br /&gt;
=== gstreamer: h264 HLS ===&lt;br /&gt;
&lt;br /&gt;
HLS (HTTP Live Streaming) has the advantage that it is easy to play in any modern web browser, including Android and iPhone devices, and that it is easy to put an HTTP caching proxy in front of it to scale to many viewers. It has the disadvantages of adding (at minimum) several seconds of latency, and of requiring an h264 encoder (which we have in hardware, but haven't figured out how to use yet, so, we're stuck with the slow software one).&lt;br /&gt;
&lt;br /&gt;
HLS segments a video stream into small chunks which are stored as .ts (MPEG Transport Stream) files, and (re)writes a playlist.m3u8 file which clients constantly refresh to discover which .ts files they should download. We use a tmpfs file system to avoid needing to write these files to the sdcard in the PineCube. Besides the program which writes the .ts and .m3u8 files (gst-launch-1.0, in our case), we'll also need a very basic web page in tmpfs and a webserver to serve the files.&lt;br /&gt;
&lt;br /&gt;
Create an hls directory to be shared in the existing tmpfs file system that is mounted at /dev/shm:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mkdir /dev/shm/hls/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create an index.html and optionally a favicon.ico or even a set of icons, and then put the files into the /dev/shm/hls directory. An example index.html that works is available in the Getting Started section of the [https://github.com/video-dev/hls.js/#getting-started README] for [https://github.com/video-dev/hls.js/ hls.js]. We recommend downloading the hls.js file and editing the example index.html to serve your local copy of it instead of fetching it from a CDN. This file provides HLS playback capabilities in browsers which don't natively support it (which is most browsers aside from the iPhone).&lt;br /&gt;
&lt;br /&gt;
In one terminal, run the camera capture pipeline:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
cd /dev/shm/hls/ &amp;amp;&amp;amp; &lt;br /&gt;
media-ctl --set-v4l2 '&amp;quot;ov5640 1-003c&amp;quot;:0[fmt:UYVY8_2X8/240x320@1/15]' &amp;amp;&amp;amp; &lt;br /&gt;
gst-launch-1.0 v4l2src ! video/x-raw,width=320,height=240,format=UYVY,framerate=15/1 ! decodebin ! videoconvert ! video/x-raw,format=I420 ! clockoverlay ! timeoverlay valignment=bottom ! x264enc speed-preset=ultrafast tune=zerolatency ! mpegtsmux ! hlssink target-duration=1 playlist-length=2 max-files=3&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively it is possible to capture at a higher resolution:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
media-ctl --set-v4l2 '&amp;quot;ov5640 1-003c&amp;quot;:0[fmt:UYVY8_2X8/1920x1080@1/15]'&lt;br /&gt;
cd /dev/shm/hls/ &amp;amp;&amp;amp; gst-launch-1.0 v4l2src ! video/x-raw,width=1920,height=1080,format=UYVY,framerate=15/1 ! decodebin ! videoconvert ! video/x-raw,format=I420 ! clockoverlay ! timeoverlay valignment=bottom ! x264enc speed-preset=ultrafast tune=zerolatency ! mpegtsmux ! hlssink target-duration=1 playlist-length=2 max-files=3&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In another, run a simple single threaded webserver which will serve html, javascript, and HLS to web clients:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
cd /dev/shm/hls/ &amp;amp;&amp;amp; python3 -m http.server&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternately, install a more efficient web server (&amp;lt;code&amp;gt;apt install nginx&amp;lt;/code&amp;gt;) and set the server root for the default configuration to be /dev/shm/hls. This will run on port 80 rather than the python3 server which defaults to port 8000.&lt;br /&gt;
&lt;br /&gt;
It should be possible to view the HLS stream directly in a web browser by visiting [http://pinecube:8000/ http://pinecube:8000/] if pinecube is the correct hostname and the name correctly resolves.&lt;br /&gt;
&lt;br /&gt;
You can also view the HLS stream with VLC: &amp;lt;code&amp;gt;vlc http://pinecube:8000/playlist.m3u8&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or with gst-play-1.0: &amp;lt;code&amp;gt;gst-play-1.0 http://pinecube:8000/playlist.m3u8&amp;lt;/code&amp;gt; (or with mpv, ffplay, etc)&lt;br /&gt;
&lt;br /&gt;
To find out about other options you can configure in the &amp;lt;code&amp;gt;hlssink&amp;lt;/code&amp;gt; gstreamer element, you can run &amp;lt;code&amp;gt;gst-inspect-1.0 hlssink&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It is worth noting here that the &amp;lt;code&amp;gt;hlssink&amp;lt;/code&amp;gt; element in GStreamer is not widely used in production environments. It is handy for testing, but for real-world free-software HLS live streaming deployments the standard tool today (January 2021) is nginx's RTMP module which can be used with ffmpeg to produce &amp;quot;adaptive streams&amp;quot; which are reencoded at varying quality levels. You can send data to an nginx-rtmp server from a gstreamer pipeline using the &amp;lt;code&amp;gt;rtmpsink&amp;lt;/code&amp;gt; element. It is also worth noting that gstreamer has a new &amp;lt;code&amp;gt;hlssink2&amp;lt;/code&amp;gt; element which we have not tested; perhaps in the future it will even have a webserver!&lt;br /&gt;
&lt;br /&gt;
=== v4l2rtspserver: h264 RTSP ===&lt;br /&gt;
&lt;br /&gt;
Install dependencies:&lt;br /&gt;
&lt;br /&gt;
 apt install -y cmake gstreamer1.0-plugins-bad gstreamer1.0-tools \&lt;br /&gt;
 gstreamer1.0-plugins-good v4l-utils gstreamer1.0-alsa alsa-utils libpango1.0-0 \&lt;br /&gt;
 libpango1.0-dev gstreamer1.0-plugins-base gstreamer1.0-x x264 \&lt;br /&gt;
 gstreamer1.0-plugins-{good,bad,ugly} liblivemedia-dev liblog4cpp5-dev \&lt;br /&gt;
 libasound2-dev vlc libssl-dev iotop libasound2-dev  liblog4cpp5-dev \&lt;br /&gt;
 liblivemedia-dev autoconf automake libtool v4l2loopback-dkms liblog4cpp5-dev \&lt;br /&gt;
 libvpx-dev libx264-dev libjpeg-dev libx265-dev linux-headers-dev-sunxi;&lt;br /&gt;
&lt;br /&gt;
Install kernel source and build v4l2loopback module:&lt;br /&gt;
&lt;br /&gt;
  apt install linux-source-5.11.3-dev-sunxi64  #Adjust kernel version number to match current installation with &amp;quot;uname -r&amp;quot;&lt;br /&gt;
  cd /usr/src/v4l2loopback-0.12.3; make &amp;amp;&amp;amp; make install &amp;amp;&amp;amp; depmod -a&lt;br /&gt;
&lt;br /&gt;
Build required v4l2 software:&lt;br /&gt;
&lt;br /&gt;
 git clone --recursive https://github.com/mpromonet/v4l2tools &amp;amp;&amp;amp; cd v4l2tools &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install;&lt;br /&gt;
 git clone --recursive https://github.com/mpromonet/v4l2rtspserver &amp;amp;&amp;amp; cd v4l2rtspserver &amp;amp;&amp;amp; cmake -D LIVE555URL=https://download.videolan.org/pub/contrib/live555/live.2020.08.19.tar.gz . &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install;&lt;br /&gt;
&lt;br /&gt;
Running the camera:&lt;br /&gt;
 media-ctl --set-v4l2 '&amp;quot;ov5640 1-003c&amp;quot;:0[fmt:UYVY8_2X8/640x480@1/30]';&lt;br /&gt;
 modprobe v4l2loopback video_nr=10 debug=2;&lt;br /&gt;
 v4l2compress -fH264  -w -vv /dev/video0 /dev/video10 &amp;amp;&lt;br /&gt;
 v4l2rtspserver -v -S -W 640 -H 480 -F 10 -b /usr/local/share/v4l2rtspserver/ /dev/video10&lt;br /&gt;
&lt;br /&gt;
Note that you might get an error when running media-ctl indicating that the resource is busy. This could be because of the motion program that runs on the stock OS installation. Check and kill any running /usr/bin/motion processes before running the above steps.&lt;br /&gt;
&lt;br /&gt;
The v4l2compress/v4l2rtspserver method of streaming the camera uses around ~45-50% of the CPU for compression of the stream into H264 (640x480@7fps) and around 1-2% of the CPU for serving the HLS stream. Total system RAM used is roughly 64MB and the load average is ~0.4-~0.5 when idle, and ~0.51-~0.60 with one HLS client streaming the camera.&lt;br /&gt;
&lt;br /&gt;
You'll probably see about a 2-3s lag with this approach, possibly due to the H264 compression and the lack of hardware acceleration at the moment.&lt;br /&gt;
&lt;br /&gt;
=== gstreamer: JPEG RTSP ===&lt;br /&gt;
&lt;br /&gt;
GStreamer's RTSP server isn't an element you can use with gst-launch, but rather a library. We failed to build its example program, so instead used this very small 3rd party tool which is based on it: https://github.com/sfalexrog/gst-rtsp-launch/&lt;br /&gt;
&lt;br /&gt;
After building gst-rtsp-launch (which is relatively simple on Ubuntu groovy; just &amp;lt;code&amp;gt;apt install libgstreamer1.0-dev libgstrtspserver-1.0-dev&amp;lt;/code&amp;gt; first), you can read JPEG data directly from the camera and stream it via RTSP: &amp;lt;code&amp;gt;media-ctl --set-v4l2 '&amp;quot;ov5640 1-003c&amp;quot;:0[fmt:JPEG_1X8/1280x720]' &amp;amp;&amp;amp; gst-rtsp-launch 'v4l2src ! image/jpeg,width=1280,height=720 ! rtpjpegpay name=pay0'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This stream can be played using &amp;lt;code&amp;gt;vlc rtsp://pinecube.local:8554/video&amp;lt;/code&amp;gt; or mpv, ffmpeg, gst-play-1.0, etc. If you increase the resolution to 1920x1080, mpv and gst-play can still play it, but VLC will complain &amp;lt;code&amp;gt;The total received frame size exceeds the client's buffer size (2000000).  73602 bytes of trailing data will be dropped!&amp;lt;/code&amp;gt; if you don't tell it to increase its buffer size with &amp;lt;code&amp;gt;--rtsp-frame-buffer-size=300000&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== gstreamer: h264 RTSP ===&lt;br /&gt;
&lt;br /&gt;
Left as an exercise to the reader (please update the wiki). Hint: involves bits from the HLS and the JPEG RTSP examples above, but needs a &amp;lt;code&amp;gt;rtph264pay name=pay0&amp;lt;/code&amp;gt; element.&lt;br /&gt;
&lt;br /&gt;
=== gstreamer: JPEG RTP UDP ===&lt;br /&gt;
&lt;br /&gt;
Configure camera: &amp;lt;code&amp;gt;media-ctl --set-v4l2 '&amp;quot;ov5640 1-003c&amp;quot;:0[fmt:JPEG_1X8/1920x1080]'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Transmit with: &amp;lt;code&amp;gt;gst-launch-1.0 v4l2src ! image/jpeg,width=1920,height=1080 ! rtpjpegpay name=pay0 ! udpsink host=$client_ip port=8000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Receive with: &amp;lt;code&amp;gt;gst-launch-1.0 udpsrc port=8000 !  application/x-rtp, encoding-name=JPEG,payload=26 !  rtpjpegdepay !  jpegdec !  autovideosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the sender must specify the recipient's IP address in place of &amp;lt;code&amp;gt;$client_ip&amp;lt;/code&amp;gt;; this can actually be a multicast address allowing for many receivers! (You'll need to specify a valid multicast address in the receivers' pipeline also; see &amp;lt;code&amp;gt;gst-inspect-1.0 udpsrc&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;gst-inspect-1.0 udpsink&amp;lt;/code&amp;gt; for details.)&lt;br /&gt;
&lt;br /&gt;
=== gstreamer: JPEG RTP TCP ===&lt;br /&gt;
&lt;br /&gt;
Configure camera: &amp;lt;code&amp;gt;media-ctl --set-v4l2 '&amp;quot;ov5640 1-003c&amp;quot;:0[fmt:JPEG_1X8/1920x1080]'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Transmit with: &amp;lt;code&amp;gt;gst-launch-1.0 v4l2src ! image/jpeg,width=1920,height=1080 ! rtpjpegpay name=pay0 ! rtpstreampay ! tcpserversink host=0.0.0.0 port=1234&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Receive with: &amp;lt;code&amp;gt;gst-launch-1.0 tcpclientsrc host=pinecube.local port=1234 ! application/x-rtp-stream,encoding-name=JPEG ! rtpstreamdepay ! application/x-rtp, media=video, encoding-name=JPEG ! rtpjpegdepay !  jpegdec !  autovideosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== gstreamer and socat: MJPEG HTTP server ===&lt;br /&gt;
&lt;br /&gt;
This rather ridiculous method uses bash, socat, and gstreamer to implement an HTTP-ish server which will serve your video as an MJPEG stream which is playable in browsers.&lt;br /&gt;
&lt;br /&gt;
This approach has the advantage of being relatively low latency (under a second), browser-compatible, and not needing to reencode anything on the CPU (it gets JPEG data from the camera itself). Compared to HLS, it has the disadvantages that MJPEG requires more bandwidth than h264 for similar quality, pause and seek are not possible, stalled connections cannot jump ahead when they are unstalled, and, in the case of this primitive implementation, it only supports one viewer at a time. (Though, really, the RTSP examples on this page perform very poorly with multiple viewers, so...)&lt;br /&gt;
&lt;br /&gt;
Gstreamer can almost do this by itself, as it has a multipartmux element which produces the headers which precede each frame. But sadly, despite various forum posts lamenting the lack of one over the last 12+ years, as of the end of the 50th year of the UNIX era (aka 2020), somehow nobody has yet gotten a webserver element merged in to gstreamer (which is necessary to produce the HTTP response, which is required for browsers other than firefox to play it). So, here is an absolutely minimal &amp;quot;webserver&amp;quot; which will get MJPEG displaying in a (single) browser.&lt;br /&gt;
&lt;br /&gt;
Create a file called &amp;lt;code&amp;gt;mjpeg-response.sh&amp;lt;/code&amp;gt;:&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 media-ctl --set-v4l2 '&amp;quot;ov5640 1-003c&amp;quot;:0[fmt:JPEG_1X8/1920x1080]'&lt;br /&gt;
 b=&amp;quot;--duct_tape_boundary&amp;quot;&lt;br /&gt;
 echo -en &amp;quot;HTTP/1.1 200 OK\r\nContent-type: multipart/x-mixed-replace;boundary=$b\r\n\r\n&amp;quot;&lt;br /&gt;
 gst-launch-1.0 v4l2src ! image/jpeg,width=1920,height=1080 ! multipartmux boundary=$b ! fdsink fd=2 2&amp;gt;&amp;amp;1 &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
Make it executable: &amp;lt;code&amp;gt;chmod +x mjpeg-response.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run the server: &amp;lt;code&amp;gt;socat TCP-LISTEN:8080,reuseaddr,fork EXEC:./mjpeg-response.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And browse to http://pinecube.local:8080/ in your browser.&lt;br /&gt;
&lt;br /&gt;
=== virtual web camera: gstreamer, mjpeg, udp rtp unicast ===&lt;br /&gt;
&lt;br /&gt;
It's possible to set up the pinecube as a virtual camera video device (Video 4 Linux) so that you can use it with video conferencing software, such as Jitsi Meet. Note that this has fairly minimal (&amp;lt;1s) lag when tested on a wired 1Gb ethernet network connection and the frame rate is passable. MJPEG is very wasteful in terms of network resources, so this is something to keep in mind. The following instructions assume Debian Linux (Bullseye) as your desktop machine, but could work with other Linux OSes too. It's possible that someday a similar system could work with Mac OS X provided that someone writes a gstreamer plugin that exposes a Mac OS Core Media DAL device as a virtual webcam, like they did [https://github.com/johnboiles/obs-mac-virtualcam here] for OBS.&lt;br /&gt;
&lt;br /&gt;
First, you will need to set up the pinecube with gstreamer much like the above gstreamer, but in 1280x720 resolution. Also, you will be streaming to the desktop machine using UDP, with IP address represented by $desktop below at UDP port 8000.&lt;br /&gt;
&lt;br /&gt;
 media-ctl --set-v4l2 '&amp;quot;ov5640 1-003c&amp;quot;:0[fmt:JPEG_1X8/1280x720]'&lt;br /&gt;
 gst-launch-1.0 v4l2src device=/dev/video0 ! image/jpeg,width=1280,height=720,framerate=30/1 ! rtpjpegpay name=pay0 ! udpsink host=$desktop port=8000&lt;br /&gt;
&lt;br /&gt;
On your desktop machine, you will need to install the gstreamer suite and the special v4l2loopback kernel module to bring the mjpeg stream to the Video 4 Linux device /dev/video10.&lt;br /&gt;
&lt;br /&gt;
 sudo apt install gstreamer1.0-tools gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly v4l2loopback-dkms&lt;br /&gt;
 sudo modprobe v4l2loopback video_nr=10 max_buffers=32 exclusive_caps=1 # Creates /dev/video10 as a virtual v4l2 device, allocates increased buffers and exposes exclusive capabilities for chromium to find the video device&lt;br /&gt;
 gst-launch-1.0 udpsrc port=8000 ! application/x-rtp, encoding-name=JPEG,payload=26,framerate=30/1 ! rtpjpegdepay ! jpegdec ! video/x-raw, format=I420, width=1280, height=720 ! autovideoconvert ! v4l2sink device=/dev/video10&lt;br /&gt;
&lt;br /&gt;
The most common error found when launching the gstreamer pipeline above is the following error message, which seems to happen when the [https://github.com/umlaeute/v4l2loopback/issues/174 max_buffers aren't set] on the v4l2loopback module (see above), or if there is a v4l client (vlc, chromium) already connected to /dev/video10 when starting the pipeline. There does seem to be a small level of instability in this stack that could be improved.&lt;br /&gt;
&lt;br /&gt;
 gstbasesrc.c(3055): gst_base_src_loop (): /GstPipeline:pipeline0/GstUDPSrc:udpsrc0:&lt;br /&gt;
 streaming stopped, reason not-negotiated (-4)&lt;br /&gt;
&lt;br /&gt;
Now that you have /dev/video10 hooked into the gstreamer pipeline you can then connect to it using VLC. VLC is a good local test that things are working. You can view the stream like this. Note that you could do the same thing with mpv/ffmpeg, but there are [https://www.raspberrypi.org/forums/viewtopic.php?t=270023 problems] currently.&lt;br /&gt;
&lt;br /&gt;
 vlc v4l2:///dev/video10&lt;br /&gt;
&lt;br /&gt;
Be sure to disconnect vlc before trying to use the virtual web camera with chromium. Launch chromium and go to a web conference like [https://meet.jit.si jitsi]. When it prompts you for the camera pick the &amp;quot;Dummy Video Device...&amp;quot; and it should be much like what you see in vlc. Note that firefox isn't really working at this moment and the symptoms appear very similar to the problem with mpv/ffmpeg mentioned above, ie. when they connect to the camera they show only the first frame and then drop. It's unclear whether the bug is in gstreamer, v4l, or ffmpeg (or somewhere in these instructions).&lt;br /&gt;
&lt;br /&gt;
== Debugging camera issues with the gstreamer pipeline ==&lt;br /&gt;
&lt;br /&gt;
If the camera does not appear to work, it is possible to change the &amp;lt;code&amp;gt;v4l2src&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;videotestsrc&amp;lt;/code&amp;gt; and the gstreamer pipeline will produce a synthetic test image without using the camera hardware.&lt;br /&gt;
&lt;br /&gt;
If the camera is only sensor noise lines over a black or white image, the camera may be in a broken state. When in that state, the following kernel messages were observed:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ 1703.577304] alloc_contig_range: [46100, 464f5) PFNs busy&lt;br /&gt;
[ 1703.578570] alloc_contig_range: [46200, 465f5) PFNs busy&lt;br /&gt;
[ 1703.596924] alloc_contig_range: [46300, 466f5) PFNs busy&lt;br /&gt;
[ 1703.598060] alloc_contig_range: [46400, 467f5) PFNs busy&lt;br /&gt;
[ 1703.600480] alloc_contig_range: [46400, 468f5) PFNs busy&lt;br /&gt;
[ 1703.601654] alloc_contig_range: [46600, 469f5) PFNs busy&lt;br /&gt;
[ 1703.619165] alloc_contig_range: [46100, 464f5) PFNs busy&lt;br /&gt;
[ 1703.619528] alloc_contig_range: [46200, 465f5) PFNs busy&lt;br /&gt;
[ 1703.619857] alloc_contig_range: [46300, 466f5) PFNs busy&lt;br /&gt;
[ 1703.641156] alloc_contig_range: [46100, 464f5) PFNs busy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SDK ==&lt;br /&gt;
&lt;br /&gt;
==== Stock Linux ====&lt;br /&gt;
* [https://files.pine64.org/SDK/PineCube/PineCube%20Stock%20BSP-SDK%20ver1.0.7z Direct Download from pine64.org]&lt;br /&gt;
** MD5 (7zip file): efac108dc98efa0a1f5e77660ba375f8&lt;br /&gt;
** File Size: 3.50GB&lt;br /&gt;
===== How to compile =====&lt;br /&gt;
&lt;br /&gt;
You can either setup a machine for the build environment, or use a Vagrant virtual machine provided by [https://elimo.io Elimo Engineering]&lt;br /&gt;
&lt;br /&gt;
====== On a dedicated machine ======&lt;br /&gt;
&lt;br /&gt;
Recommended system requirements:&lt;br /&gt;
* OS: (L)Ubuntu 16.04&lt;br /&gt;
* CPU: 64-bit based&lt;br /&gt;
* Memory: 8 GB or higher&lt;br /&gt;
* Disk: 15 GB free hard disk space&lt;br /&gt;
&lt;br /&gt;
'''Install required packages'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install p7zip-full git make u-boot-tools libxml2-utils bison build-essential gcc-arm-linux-gnueabi g++-arm-linux-gnueabi zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32z1-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Install older Make 3.82 and Java JDK 6'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pushd /tmp&lt;br /&gt;
wget https://ftp.gnu.org/gnu/make/make-3.82.tar.gz&lt;br /&gt;
tar xfv make-3.82.tar.gz&lt;br /&gt;
cd make-3.82&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
sudo apt purge -y make&lt;br /&gt;
sudo ./make install&lt;br /&gt;
cd ..&lt;br /&gt;
# Please, download jdk-6u45-linux-x64.bin from https://www.oracle.com/java/technologies/javase-java-archive-javase6-downloads.html (requires free login)&lt;br /&gt;
chmod +x jdk-6u45-linux-x64.bin &lt;br /&gt;
./jdk-6u45-linux-x64.bin &lt;br /&gt;
sudo mkdir /opt/java/&lt;br /&gt;
sudo mv jdk1.6.0_45/ /opt/java/&lt;br /&gt;
sudo update-alternatives --install /usr/bin/javac javac /opt/java/jdk1.6.0_45/bin/javac 1&lt;br /&gt;
sudo update-alternatives --install /usr/bin/java java /opt/java/jdk1.6.0_45/bin/java 1&lt;br /&gt;
sudo update-alternatives --install /usr/bin/javaws javaws /opt/java/jdk1.6.0_45/bin/javaws 1&lt;br /&gt;
sudo update-alternatives --config javac&lt;br /&gt;
sudo update-alternatives --config java&lt;br /&gt;
sudo update-alternatives --config javaws&lt;br /&gt;
popd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Unpack SDK and then compile and pack the image'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
7z x 'PineCube Stock BSP-SDK ver1.0.7z'&lt;br /&gt;
mv 'PineCube Stock BSP-SDK ver1.0' pinecube-sdk&lt;br /&gt;
cd pinecube-sdk/camdroid&lt;br /&gt;
source build/envsetup.sh&lt;br /&gt;
lunch&lt;br /&gt;
mklichee&lt;br /&gt;
make -j3&lt;br /&gt;
pack&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== Using Vagrant ======&lt;br /&gt;
&lt;br /&gt;
You can avoid setting up your machine and just use Vagrant to spin up a development environment in a VM.&lt;br /&gt;
&lt;br /&gt;
Just clone the [https://github.com/elimo-engineering/pinecube-sdk-vagrant Elimo Engineering repo] and follow the instructions in the [https://github.com/elimo-engineering/pinecube-sdk-vagrant/blob/main/README.md readme file]&lt;br /&gt;
&lt;br /&gt;
After spinning up the VM, you just need to run the build:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd pinecube-sdk/camdroid&lt;br /&gt;
source build/envsetup.sh&lt;br /&gt;
lunch&lt;br /&gt;
mklichee&lt;br /&gt;
make -j3&lt;br /&gt;
pack&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Community Projects ==&lt;br /&gt;
&lt;br /&gt;
Share your project with a PineCube here!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:PineCube]] [[Category:Allwinner(Sochip) S3]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Reprogramming_the_PineTime&amp;diff=9379</id>
		<title>Reprogramming the PineTime</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Reprogramming_the_PineTime&amp;diff=9379"/>
		<updated>2021-03-04T19:27:36Z</updated>

		<summary type="html">&lt;p&gt;Avamander: Minor copy from lupyuen/openocd-spi&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The PineTime Dev Kit comes with the back not glued down to allow it to be easily reprogrammed, however the kit does not include an hardware programmer/debugger. &lt;br /&gt;
&lt;br /&gt;
'''Before you can use your debugger/programmer, you probably have to [[PineTime devkit wiring|wire up your pinetime]]. Heavily recommended you read this first!'''&lt;br /&gt;
&lt;br /&gt;
There is a bewildering variety of different hardware programmers available but whatever programmer you have there are only a few tasks you will have to learn about:&lt;br /&gt;
&lt;br /&gt;
* Unlocking the device '''Note: PineTime watches shipped after 20 Sep 2020 do not require unlocking. They are shipped unlocked.'''&lt;br /&gt;
* Uploading new software&lt;br /&gt;
* Running a debugger&lt;br /&gt;
&lt;br /&gt;
All of these are described in this article. &lt;br /&gt;
&lt;br /&gt;
Unlocking the device is a one-time action that is needed to enable to debug port and provide full access to the device. Unlocking the device will erase all existing software from the internal flash.&lt;br /&gt;
&lt;br /&gt;
= SWD Pinout =&lt;br /&gt;
 	&lt;br /&gt;
See [[PineTime devkit wiring|PineTime devkit wiring]]&lt;br /&gt;
&lt;br /&gt;
= nrfjprog (for Segger JLink) =&lt;br /&gt;
&lt;br /&gt;
The following steps have been tested with the Segger JLink embedded in the [https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52-DK NRF52-DK development board].&lt;br /&gt;
&lt;br /&gt;
=== Hookup ===&lt;br /&gt;
&lt;br /&gt;
Connect the Pinetime SWD pins to the debugger (P20 on NRF52-DK)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Pinetime&lt;br /&gt;
!JLink&lt;br /&gt;
|-&lt;br /&gt;
|GND&lt;br /&gt;
|GND&lt;br /&gt;
|-&lt;br /&gt;
|SWDCLK&lt;br /&gt;
|SWDCLK&lt;br /&gt;
|-&lt;br /&gt;
|SWDIO&lt;br /&gt;
|SWDIO&lt;br /&gt;
|-&lt;br /&gt;
|VCC (3.3V)&lt;br /&gt;
|VTG (target detect)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Unlocking the FLASH ===&lt;br /&gt;
&lt;br /&gt;
Unlocking the device and erase the memory. &lt;br /&gt;
&lt;br /&gt;
'''You need to execute this step only once, to remove the read protection on the memory. Note that it will erase the whole flash memory of the MCU!''' :&lt;br /&gt;
 &lt;br /&gt;
 nrfjprog -f NRF52 --recover&lt;br /&gt;
&lt;br /&gt;
=== Uploading new software ===&lt;br /&gt;
&lt;br /&gt;
1. Program the BLE softdevice (if needed by the firmware). Replace PATH_TO_NRF_SDK by the path where you unzipped the [https://www.nordicsemi.com/Software-and-Tools/Software/nRF5-SDK NRF52 SDK] :&lt;br /&gt;
&lt;br /&gt;
 nrfjprog -f NRF52 --program /PATH_TO_NRF_SDK/components/softdevice/s132/hex/s132_nrf52_6.1.1_softdevice.hex --sectorerase&lt;br /&gt;
&lt;br /&gt;
2. Program the firmware (replace firmware.hex by the actual filename of the firmware):&lt;br /&gt;
&lt;br /&gt;
 nrfjprog -f NRF52 --program firmware.hex --sectorerase&lt;br /&gt;
&lt;br /&gt;
3. Reset and run the new firmware:&lt;br /&gt;
 &lt;br /&gt;
 nrfjprog -f NRF52 --reset&lt;br /&gt;
&lt;br /&gt;
= OpenOCD =&lt;br /&gt;
&lt;br /&gt;
OpenOCD, the Open On-Chip Debugger supports multiple different adapters. You can read more about it here: http://openocd.org/&lt;br /&gt;
&lt;br /&gt;
== Adapters ==&lt;br /&gt;
&lt;br /&gt;
These examples allow you to use telnet to issue futher commands to the devkit. Using them you can connect to ''127.0.0.1'' (''localhost'') port ''4444'' using telnet and invoke OpenOCD commands. GDB should also be available on port ''3333''.&lt;br /&gt;
&lt;br /&gt;
You can simplify your life by creating a configuration file that contains the interface, transport, target and speed configuration. Things like CLion also need one to work properly.&lt;br /&gt;
&lt;br /&gt;
If you aren't using the latest version of OpenOCD, you might need to substitute things in these examples with older syntax (e.g. instead of ''adapter speed'' it's ''adapter_khz'').&lt;br /&gt;
&lt;br /&gt;
=== CMSIS-DAP ===&lt;br /&gt;
&lt;br /&gt;
Issue this command to initialize a connection to the devkit:&lt;br /&gt;
&lt;br /&gt;
 openocd \&lt;br /&gt;
    -c 'source [find interface/cmsis-dap.cfg]' \&lt;br /&gt;
    -c 'transport select swd' \&lt;br /&gt;
    -c 'source [find target/nrf52.cfg]' \&lt;br /&gt;
    -c 'adapter speed 8000' \&lt;br /&gt;
    -c 'init'&lt;br /&gt;
&lt;br /&gt;
=== JLink ===&lt;br /&gt;
&lt;br /&gt;
Start OpenOCD:&lt;br /&gt;
&lt;br /&gt;
 openocd \&lt;br /&gt;
    -c 'source [find interface/jlink.cfg]' \&lt;br /&gt;
    -c 'transport select swd' \&lt;br /&gt;
    -c 'source [find target/nrf52.cfg]' \&lt;br /&gt;
    -c 'adapter speed 8000' \&lt;br /&gt;
    -c 'init'&lt;br /&gt;
&lt;br /&gt;
=== Raspberry Pi ===&lt;br /&gt;
&lt;br /&gt;
 openocd \&lt;br /&gt;
    -c 'source bcm2835spi' \&lt;br /&gt;
    -c 'bcm2835spi_speed 31200' \&lt;br /&gt;
    -c 'source [find target/nrf52.cfg]' \&lt;br /&gt;
    -c 'init'&lt;br /&gt;
&lt;br /&gt;
=== STLink ===&lt;br /&gt;
&lt;br /&gt;
Connect PineTime SWD Pins to ST-Link v2 as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!PineTime&lt;br /&gt;
!ST-Link&lt;br /&gt;
|-&lt;br /&gt;
|GND&lt;br /&gt;
|GND&lt;br /&gt;
|-&lt;br /&gt;
|SWDCLK&lt;br /&gt;
|SWDCLK&lt;br /&gt;
|-&lt;br /&gt;
|SWDIO&lt;br /&gt;
|SWDIO&lt;br /&gt;
|-&lt;br /&gt;
|VCC (3.3V)&lt;br /&gt;
|3.3V&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:pinetime-stlink.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
Note that only the bottom row of pins on ST-Link are used.&lt;br /&gt;
&lt;br /&gt;
To flash PineTime with ST-Link on Linux and macOS, use [https://github.com/lupyuen/pinetime-updater/blob/master/README.md PineTime Updater]&lt;br /&gt;
&lt;br /&gt;
[[PineTime FAQ|'''ST-Link can't be used to remove nRF52 flash protection''']]&lt;br /&gt;
&lt;br /&gt;
== Unlocking the device ==&lt;br /&gt;
&lt;br /&gt;
If you need to disable access port protection then you can do this using the following commands below.&lt;br /&gt;
&lt;br /&gt;
This can be done in two ways:&lt;br /&gt;
&lt;br /&gt;
Appending this to OpenOCD command line:&lt;br /&gt;
&lt;br /&gt;
  -c 'nrf52.dap apreg 1 0x04' -c 'nrf52.dap apreg 1 0x04 0x01' -c 'nrf52.dap apreg 1 0x04'&lt;br /&gt;
&lt;br /&gt;
Or by using the telnet connection, just type in ''telnet localhost 4444'' and then you can issue commands to OpenOCD:&lt;br /&gt;
&lt;br /&gt;
Note: ''Unlocking the device to remove access port protection will erase the contents of flash.''&lt;br /&gt;
&lt;br /&gt;
  telnet localhost 4444&lt;br /&gt;
    Trying 127.0.0.1...&lt;br /&gt;
    Connected to localhost.&lt;br /&gt;
    Escape character is '^]'.&lt;br /&gt;
    Open On-Chip Debugger&lt;br /&gt;
    &amp;gt; nrf52.dap apreg 1 0x04&lt;br /&gt;
    0x00000000&lt;br /&gt;
    &amp;gt; nrf52.dap apreg 1 0x04 0x01&lt;br /&gt;
    &amp;gt; nrf52.dap apreg 1 0x04&lt;br /&gt;
    0x00000001&lt;br /&gt;
&lt;br /&gt;
(If the ''nrf52.dap'' command cannot be found, try just ''dap'' instead.)&lt;br /&gt;
&lt;br /&gt;
== Uploading new software ==&lt;br /&gt;
&lt;br /&gt;
Just issue this command, replace ''code.hex'' with your own (and cmsis-dap.cfg with an appropriate adapter).&lt;br /&gt;
&lt;br /&gt;
  openocd \&lt;br /&gt;
      -c 'source [find interface/cmsis-dap.cfg]' \&lt;br /&gt;
      -c 'transport select swd' \&lt;br /&gt;
      -c 'source [find target/nrf52.cfg]' \&lt;br /&gt;
      -c 'init' \&lt;br /&gt;
      -c 'nrf5 mass_erase' \&lt;br /&gt;
      -c 'program code.hex verify' \&lt;br /&gt;
      -c 'reset' \&lt;br /&gt;
      -c 'exit'&lt;br /&gt;
&lt;br /&gt;
= Black Magic Probe =&lt;br /&gt;
&lt;br /&gt;
BlackMagic Probe is an JTAG/SWD adapter with open-source firmware, allowing for it to be ported to a multitude of different boards. One of it's defining features is lack of need for intermediate software such as OpenOCD - one would just need to connect to the GDB server running on the chip and proceed with debugging. For more information, refer to [https://github.com/blacksphere/blackmagic/wiki wiki].&lt;br /&gt;
&lt;br /&gt;
=== Native adapters ===&lt;br /&gt;
&lt;br /&gt;
The native adapters are the official Black Magic family of debug adapters, including the original Black Magic Probe and the Black Magic Probe Mini. By buying the official hardware you are supporting the continued development of the Black Magic Probe software.&lt;br /&gt;
&lt;br /&gt;
Providing your native adapter is running up-to-date firmware then it can be used to program your PineTime.&lt;br /&gt;
&lt;br /&gt;
=== STM32 (Blue Pill) ===&lt;br /&gt;
&lt;br /&gt;
It is possible to flash a popular development board based on STM32F103C8T6 microcontroller, known as Blue Pill, to make a BlackMagic Probe device. For example, one may follow instructions in [https://forum.pine64.org/showthread.php?tid=8816&amp;amp;pid=57095#pid57095 forum post] or [https://gist.github.com/darnel/dac1370d057e176386ca4026418abc2b gist] (mac os). Also, it is possible to use SWD pins on the board to flash other devices, instead using arbitrary pins on the board itself. See [https://buger.dread.cz/black-magic-probe-bmp-on-bluepill-stm32f103c8-minimum-system-development-board.html this link] for more detals.&lt;br /&gt;
&lt;br /&gt;
=== Other hardware ===&lt;br /&gt;
&lt;br /&gt;
The Black Magic Probe firmware can be run on a variety of host devices. See [https://github.com/blacksphere/blackmagic/wiki/Debugger-Hardware BMP Debugger Hardware] for more information.&lt;br /&gt;
&lt;br /&gt;
=== Using the BMP to flash the PineTime ===&lt;br /&gt;
&lt;br /&gt;
Refer to the BMP [https://github.com/blacksphere/blackmagic/wiki/Useful-GDB-commands wiki] for the full description of commands.&lt;br /&gt;
Overall, the process on Linux is like following. (/dev/ttyBmpGdb is a symlink created by the udev rule). It's useful to create a gdb script file (or .gdbinit) with following commands:&lt;br /&gt;
&lt;br /&gt;
  target extended-remote /dev/ttyBmpGdb&lt;br /&gt;
  monitor swdp_scan&lt;br /&gt;
  attach 1&lt;br /&gt;
  file %firmware file%&lt;br /&gt;
&lt;br /&gt;
Then one may use '''load''' command to flash the firmware, '''compare-sections''' to verify the upload, or '''monitor erase_mass''' to erase the firmware. &lt;br /&gt;
&lt;br /&gt;
Then, proceed with debugging as normal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= External links and additional tutorials = &lt;br /&gt;
&lt;br /&gt;
* https://github.com/jlukanc1/pinetime-boot-flasher&lt;br /&gt;
* https://blog.aegrel.ee/absniffer-cmsis-dap-sniffer.html&lt;br /&gt;
* https://blog.dbrgn.ch/2020/5/16/nrf52-unprotect-flash-jlink-openocd/&lt;br /&gt;
* https://medium.com/@ly.lee/openocd-on-raspberry-pi-better-with-swd-on-spi-7dea9caeb590&lt;br /&gt;
* https://medium.com/@ly.lee/build-and-flash-rust-mynewt-firmware-for-pinetime-smart-watch-5e14259c55&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineTime_Equivalents&amp;diff=9344</id>
		<title>PineTime Equivalents</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineTime_Equivalents&amp;diff=9344"/>
		<updated>2021-02-24T22:00:45Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains a list of PineTime hardware equivalents or very close clones. Primarily to keep track of which devices could possibly be &amp;quot;jailbroken&amp;quot; and run PineTime firmware.&lt;br /&gt;
&lt;br /&gt;
Please add devices that use the same chipset to this list.&lt;br /&gt;
&lt;br /&gt;
==== Kalakate ====&lt;br /&gt;
&lt;br /&gt;
Seems to be PineTime hardware, interesting GUI, seems DaFit-y&lt;br /&gt;
&lt;br /&gt;
* https://www.youtube.com/watch?v=1VdMxbOYxgA&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== P8 ====&lt;br /&gt;
&lt;br /&gt;
A few firmware already support both the P8 and PineTime, the physical differences are minor - only a few MCU pins are mapped differently.&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Main_Page&amp;diff=9343</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Main_Page&amp;diff=9343"/>
		<updated>2021-02-24T21:26:14Z</updated>

		<summary type="html">&lt;p&gt;Avamander: /* Chat platforms */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PINE64 is a community-driven company focused on creating high-quality, low cost ARM devices for businesses and individuals around the globe. PINE64 made its debut with the [[PINE_A64|Pine A64]] single-board computer, which successfully launched on Kickstarter in 2015. PINE64 has since released a multitude of other devices, including both development boards and end-user devices.&lt;br /&gt;
&lt;br /&gt;
PINE64 has a large and active community and offers a variety of resources for businesses and hobbyists to take advantage of their projects. To learn more about PINE64 and the available devices, please visit the main [https://www.pine64.org/ PINE64 website].&lt;br /&gt;
&lt;br /&gt;
= Devices =&lt;br /&gt;
&lt;br /&gt;
* [[Nutcracker]]&lt;br /&gt;
* [[PINE A64]]&lt;br /&gt;
* [[PINE A64-LTS/SOPine]], [[SOPine_Clusterboard | Clusterboard]]&lt;br /&gt;
* [[PINE H64]]&lt;br /&gt;
* Pinebook:&lt;br /&gt;
** [[Pinebook]]&lt;br /&gt;
** [[Pinebook Pro]]&lt;br /&gt;
* [[Pinecil]]&lt;br /&gt;
* [[PineCube]]&lt;br /&gt;
* [[PinePhone]]&lt;br /&gt;
* [[PinePower]]&lt;br /&gt;
* [[PineTab]]&lt;br /&gt;
* [[PineTime]]&lt;br /&gt;
* [[Quartz64]]&lt;br /&gt;
* [[ROCK64]]&lt;br /&gt;
* [[ROCKPro64]]&lt;br /&gt;
* [[SOEdge]]&lt;br /&gt;
&lt;br /&gt;
= Community and Support =&lt;br /&gt;
&lt;br /&gt;
== Chat platforms ==&lt;br /&gt;
Pine64 has a large and very active community. Community discussion takes place on a variety of chat platforms, which are all bridged together - messages sent via one platform will be sent to all other platforms automatically.&lt;br /&gt;
&lt;br /&gt;
The community chat platforms are:&lt;br /&gt;
&lt;br /&gt;
'''IRC'''&lt;br /&gt;
: Server: [ircs://irc.pine64.org irc.pine64.org], type &amp;lt;code&amp;gt;/list&amp;lt;/code&amp;gt; to see all available channels (web IRC: https://www.pine64.org/web-irc/). Only some of the channels are available.&lt;br /&gt;
&lt;br /&gt;
'''Discord'''&lt;br /&gt;
: [https://discordapp.com/invite/DgB7kzr Discord invite link] (all channels are available)&lt;br /&gt;
&lt;br /&gt;
'''Matrix and Telegram'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Matrix !! Telegram&lt;br /&gt;
|-&lt;br /&gt;
| PINE64 News               || missing                                                                        || [https://t.me/PINE64_News @PINE64_News]&lt;br /&gt;
|-&lt;br /&gt;
| PINE A64 SBC              || [https://riot.im/app/#/room/#pine64:matrix.org #pine64:matrix.org]             || [https://t.me/mtrx_rock64 @mtrx_pine64]&lt;br /&gt;
|-&lt;br /&gt;
| ROCK64 / ROCKPro64        || [https://riot.im/app/#/room/#rock64:matrix.org #rock64:matrix.org]             || [https://t.me/mtrx_rock64 @mtrx_rock64]&lt;br /&gt;
|-&lt;br /&gt;
| Pinebook and Pinebook Pro || [https://riot.im/app/#/room/#pinebook:matrix.org #pinebook:matrix.org]         || [https://t.me/mtx_pinebook @mtx_pinebook]&lt;br /&gt;
|-&lt;br /&gt;
| PinePhone                 || [https://riot.im/app/#/room/#pinephone:matrix.org #pinephone:matrix.org]       || [https://t.me/pinephone @pinephone]&lt;br /&gt;
|-&lt;br /&gt;
| PineTab                   || [https://riot.im/app/#/room/#pinetab:pine64.org #pinetab:matrix.org]           || [https://t.me/PineTab @PineTab]&lt;br /&gt;
|-&lt;br /&gt;
| PineTime                  || [https://riot.im/app/#/room/#pinetime:matrix.org #pinetime:matrix.org]         || [https://t.me/pinetime @pinetime]&lt;br /&gt;
|-&lt;br /&gt;
| PineTime Development      || [https://riot.im/app/#/room/#pinetime-dev:matrix.org #pinetime-dev:matrix.org] || [https://t.me/pinetime_dev @pinetime_dev]&lt;br /&gt;
|-&lt;br /&gt;
| Pinecil                   || [https://riot.im/app/#/room/#pinecil:matrix.org #pinecil:matrix.org]           || [https://t.me/joinchat/Kmi2S1iej-_4DgrVf3jjnQ Pinecil]&lt;br /&gt;
|-&lt;br /&gt;
| Pinetalk                  || missing                                                                        || missing&lt;br /&gt;
|-&lt;br /&gt;
| Cube                      || [https://riot.im/app/#/room/#cube64:matrix.org #cube64:matrix.org]             || missing&lt;br /&gt;
|-&lt;br /&gt;
| Nutcracker                || [https://riot.im/app/#/room/#pine64-nutcracker:matrix.org #pine64-nutcracker:matrix.org] || [https://t.me/joinchat/Kmi2S0nOsT240emHk-aO6g Nutcracker]&lt;br /&gt;
|-&lt;br /&gt;
| Off-topic                 || [https://riot.im/app/#/room/#offtopic64:matrix.org #offtopic64:matrix.org]     || [https://t.me/pine64offtopic @pine64offtopic]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''Matrix'''&lt;br /&gt;
: PINE64 News (missing)&lt;br /&gt;
: [https://riot.im/app/#/room/#pine64:matrix.org #pine64:matrix.org] - PINE A64 SBC room&lt;br /&gt;
: [https://riot.im/app/#/room/#rock64:matrix.org #rock64:matrix.org] - ROCK64 / ROCKPro64 room&lt;br /&gt;
: [https://riot.im/app/#/room/#pinebook:matrix.org #pinebook:matrix.org] - Pinebook and Pinebook Pro room&lt;br /&gt;
: [https://riot.im/app/#/room/#pinephone:matrix.org #pinephone:matrix.org] - PinePhone room&lt;br /&gt;
: [https://riot.im/app/#/room/#pinetab:pine64.org #pinetab:matrix.org] - PineTab room&lt;br /&gt;
: [https://riot.im/app/#/room/#pinetime64:matrix.org #pinetime64:matrix.org] - PineTime room&lt;br /&gt;
: [https://riot.im/app/#/room/#pinetime-dev:matrix.org #pinetime-dev:matrix.org] - PineTime Development room&lt;br /&gt;
: [https://riot.im/app/#/room/#pinecil:matrix.org #pinecil:matrix.org] - Pinecil room&lt;br /&gt;
: Pinetalk (missing)&lt;br /&gt;
: [https://riot.im/app/#/room/#cube64:matrix.org #cube64:matrix.org] - Cube room&lt;br /&gt;
: [https://riot.im/app/#/room/#pine64-nutcracker:matrix.org #pine64-nutcracker:matrix.org] - Nutcracker room&lt;br /&gt;
: [https://riot.im/app/#/room/#offtopic64:matrix.org #offtopic64:matrix.org] - Off-topic room&lt;br /&gt;
&lt;br /&gt;
'''Telegram'''&lt;br /&gt;
: [https://t.me/PINE64_News PINE64 News]&lt;br /&gt;
: [https://t.me/mtrx_pine64 PINE A64 SBC]&lt;br /&gt;
: [https://t.me/mtrx_rock64 ROCK64 / ROCKPro64]&lt;br /&gt;
: [https://t.me/mtx_pinebook Pinebook and Pinebook Pro]&lt;br /&gt;
: [https://t.me/pinephone PinePhone]&lt;br /&gt;
: [https://t.me/PineTab PineTab]&lt;br /&gt;
: [https://t.me/pinetime PineTime]&lt;br /&gt;
: [https://t.me/pinetime_dev PineTime Development]&lt;br /&gt;
: [https://t.me/joinchat/Kmi2S1iej-_4DgrVf3jjnQ Pinecil]&lt;br /&gt;
: Pinetalk (missing)&lt;br /&gt;
: Cube (missing)&lt;br /&gt;
: [https://t.me/joinchat/Kmi2S0nOsT240emHk-aO6g Nutcracker]&lt;br /&gt;
: [https://t.me/pine64offtopic Pine64 Off-topic]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Forums ==&lt;br /&gt;
PINE64 runs an offical forum powered by open source [https://mybb.com/ MyBB] forum server software. According to [https://www.pine64.org/gettings-started/ Getting Started | PINE64], on the forum one can report issues, help out other users, offer up findings and new information, but also engage directly with community and partner-project developers, as well as with PINE64 members.&lt;br /&gt;
&lt;br /&gt;
: [https://forum.pine64.org/ Official Pine64 Forum]&lt;br /&gt;
&lt;br /&gt;
'''Reddit'''&lt;br /&gt;
: [https://www.reddit.com/r/PINE64official/ Official Pine64 Reddit]&lt;br /&gt;
: [https://www.reddit.com/r/PinePhoneOfficial/ Official PinePhone Reddit]&lt;br /&gt;
&lt;br /&gt;
= Helpful Information for Beginners  =&lt;br /&gt;
Sections dedicated to the very beginners who are just getting started in the SBC and ARM64 world. If you're just starting out and having issues with getting going, please consider browsing both sections for pointers. &lt;br /&gt;
&lt;br /&gt;
'''Getting Started'''&lt;br /&gt;
: [[NOOB]] - Basic information on how to flash SD cards and eMMC modules as well as handling  your devices.&lt;br /&gt;
&lt;br /&gt;
'''Project Ideas'''&lt;br /&gt;
: [[Project]] - A variety of well-documented PINE64 projects to serve as inspiration.&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineTime_Hardware_Wishlist&amp;diff=9342</id>
		<title>PineTime Hardware Wishlist</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineTime_Hardware_Wishlist&amp;diff=9342"/>
		<updated>2021-02-24T21:23:26Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains a list of things people wish PineTime did differently&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
&lt;br /&gt;
* Long pressing the button should power-cycle the watch without any software being involved&lt;br /&gt;
* Used sensors should be NDA-free and preferably also blob-free&lt;br /&gt;
* Other display tech could be explored. [//en.Wikipedia.org/wiki/Transflective_liquid-crystal_display A transflective LCD] would probably be a nice option. Or potentially OLED?&lt;br /&gt;
* Touchscreen should possibly have a configurable sensitivity level for both glove-wearing and droplet-resistance. Preferably it should still be a capacitive one, a resistive touchscreen would have too many trade-offs.&lt;br /&gt;
* A slightly bigger 256×256 pixel graphics display size is preferable for its binary alignment, affording some low-level simplicity – it has the property that its X and Y coordinates are each addressable with a single byte, with no out-of-bounds; its total number of pixels is 65536 (another power of 2), and each pixel is addressable with exactly 2 bytes, with perfect efficiency. The [http://Pelulamu.net/ibniz IBNIZ (Ideally Bare Numeric Impression giZmo) virtual machine], designed for fun minimalist demoscene graphics, has chosen 256×256 for its virtual display, and makes use of these simplicity advantages. If PineTime also chose 256×256 then it would be a target platform for unclipped IBNIZ demoscene programmes, which would be really fun to play around with on one's wrist!&lt;br /&gt;
* A full redraw on the display takes 120ms at the very least, which is 8Hz. A smooth scrolling/usage/animation experience would be 30Hz minimum, preferably 60. I heard a rumor that the SPI connection to the display is a bottleneck.&lt;br /&gt;
* Some sort of scroll wheel would be nice for convenience.&lt;br /&gt;
* Changed GPIO assignment so more functionality is available (i.e. NFC and VSYNC)&lt;br /&gt;
* Wireless charging, or Qi Charging capability&lt;br /&gt;
* An external RTC circuit saving the current time to allow the main MCU go to deep-sleep.&lt;br /&gt;
* nRF5340 update: QSPI, CryptoCell + Secure Key Storage, has more RAM, a coprocessor and the possibility to expose USB through power pins&lt;br /&gt;
* Version without sensors but maybe bigger battery&lt;br /&gt;
* A couple of pins on the programmer connector to allow UART while developing (currently there is a TX test point on PCB). (Note: There's ARM SemiHosting and Segger RTT)&lt;br /&gt;
* Connect the pin of LCD controller that allows RD/WR from it in order to save RAM on the MCU.&lt;br /&gt;
* LCD must be centered on case. Currently is not and watchfaces seems different when clock is put on the other wrist.&lt;br /&gt;
* A NFC antenna around the case, connected to the NFC pins.&lt;br /&gt;
* BMA421 accelerometer doesn't have a datasheet (it seems private to some hardware integrators): take it off and put alternative with open documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineTime_Hardware_Wishlist&amp;diff=9341</id>
		<title>PineTime Hardware Wishlist</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineTime_Hardware_Wishlist&amp;diff=9341"/>
		<updated>2021-02-24T21:22:59Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains a list of things people wish PineTime did differently&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
&lt;br /&gt;
* Long pressing the button should power-cycle the watch without any software being involved&lt;br /&gt;
* Used sensors should be NDA-free and preferably also blob-free&lt;br /&gt;
* Other display tech could be explored. [//en.Wikipedia.org/wiki/Transflective_liquid-crystal_display A transflective LCD] would probably be a nice option. Or potentially OLED?&lt;br /&gt;
* Touchscreen should possibly have a configurable sensitivity level for both glove-wearing and droplet-resistance. Preferably it should still be a capacitive one, a resistive touchscreen would have too many trade-offs.&lt;br /&gt;
* A slightly bigger 256×256 pixel graphics display size is preferable for its binary alignment, affording some low-level simplicity – it has the property that its X and Y coordinates are each addressable with a single byte, with no out-of-bounds; its total number of pixels is 65536 (another power of 2), and each pixel is addressable with exactly 2 bytes, with perfect efficiency. The [http://Pelulamu.net/ibniz IBNIZ (Ideally Bare Numeric Impression giZmo) virtual machine], designed for fun minimalist demoscene graphics, has chosen 256×256 for its virtual display, and makes use of these simplicity advantages. If PineTime also chose 256×256 then it would be a target platform for unclipped IBNIZ demoscene programmes, which would be really fun to play around with on one's wrist!&lt;br /&gt;
* A full redraw on the display takes 120ms at the very least, which is 8Hz. A smooth scrolling/usage/animation experience would be 30Hz minimum, preferably 60. I heard a rumor that the SPI connection to the display is a bottleneck. Can this be fixed?&lt;br /&gt;
* Some sort of scroll wheel would be nice for convenience.&lt;br /&gt;
* Changed GPIO assignment so more functionality is available (i.e. NFC and VSYNC)&lt;br /&gt;
* Wireless charging, or Qi Charging capability&lt;br /&gt;
* An external RTC circuit saving the current time to allow the main MCU go to deep-sleep.&lt;br /&gt;
* nRF5340 update: QSPI, CryptoCell + Secure Key Storage, has more RAM, a coprocessor and the possibility to expose USB through power pins&lt;br /&gt;
* Version without sensors but maybe bigger battery&lt;br /&gt;
* A couple of pins on the programmer connector to allow UART while developing (currently there is a TX test point on PCB). (Note: There's ARM SemiHosting and Segger RTT)&lt;br /&gt;
* Connect the pin of LCD controller that allows RD/WR from it in order to save RAM on the MCU.&lt;br /&gt;
* LCD must be centered on case. Currently is not and watchfaces seems different when clock is put on the other wrist.&lt;br /&gt;
* A NFC antenna around the case, connected to the NFC pins.&lt;br /&gt;
* BMA421 accelerometer doesn't have a datasheet (it seems private to some hardware integrators): take it off and put alternative with open documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineTime_Hardware_Wishlist&amp;diff=9340</id>
		<title>PineTime Hardware Wishlist</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineTime_Hardware_Wishlist&amp;diff=9340"/>
		<updated>2021-02-24T21:22:19Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains a list of things people wish PineTime did differently&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
&lt;br /&gt;
* Long pressing the button should power-cycle the watch without any software being involved&lt;br /&gt;
* Used sensors should be NDA-free and preferably also blob-free&lt;br /&gt;
* Other display tech could be explored. [//en.Wikipedia.org/wiki/Transflective_liquid-crystal_display A transflective LCD] would probably be a nice option. Or potentially OLED?&lt;br /&gt;
* Touchscreen should possibly have a configurable sensitivity level for both glove-wearing and droplet-resistance. Preferably it should still be a capacitive one, a resistive touchscreen would have too many trade-offs.&lt;br /&gt;
* A slightly bigger 256×256 pixel graphics display size is preferable for its binary alignment, affording some low-level simplicity – it has the property that its X and Y coördinates are each addressable with a single byte, with no out-of-bounds; its total number of pixels is 65536 (another power of 2), and each pixel is addressable with exactly 2 bytes, with perfect efficiency. The [http://Pelulamu.net/ibniz IBNIZ (Ideally Bare Numeric Impression giZmo) virtual machine], designed for fun minimalist demoscene graphics, has chosen 256×256 for its virtual display, and makes use of these simplicity advantages. If PineTime also chose 256×256 then it would be a target platform for unclipped IBNIZ demoscene programmes, which would be really fun to play around with on one's wrist!&lt;br /&gt;
* A full redraw on the display takes 120ms at the very least, which is 8Hz. A smooth scrolling/usage/animation experience would be 30Hz minimum, preferably 60. I heard a rumor that the SPI connection to the display is a bottleneck. Can this be fixed?&lt;br /&gt;
* Some sort of scroll wheel would be nice for convenience.&lt;br /&gt;
* Changed GPIO assignment so more functionality is available (i.e. NFC and VSYNC)&lt;br /&gt;
* Wireless charging, or Qi Charging capability&lt;br /&gt;
* An external RTC circuit saving the current time to allow the main MCU go to deep-sleep.&lt;br /&gt;
* nRF5340 update: QSPI, CryptoCell + Secure Key Storage, has more RAM, a coprocessor and the possibility to expose USB through power pins&lt;br /&gt;
* Version without sensors but maybe bigger battery&lt;br /&gt;
* A couple of pins on the programmer connector to allow UART while developing (currently there is a TX test point on PCB). (Note: There's ARM SemiHosting and Segger RTT)&lt;br /&gt;
* Connect the pin of LCD controller that allows RD/WR from it in order to save RAM on the MCU.&lt;br /&gt;
* LCD must be centered on case. Currently is not and watchfaces seems different when clock is put on the other wrist.&lt;br /&gt;
* A NFC antenna around the case, connected to the NFC pins.&lt;br /&gt;
* BMA421 accelerometer doesn't have a datasheet (it seems private to some hardware integrators): take it off and put alternative with open documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineTime_FAQ&amp;diff=9339</id>
		<title>PineTime FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineTime_FAQ&amp;diff=9339"/>
		<updated>2021-02-24T21:19:47Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Does PineTime run Linux? ===&lt;br /&gt;
&lt;br /&gt;
No. [https://forum.pine64.org/showthread.php?tid=8112 Please read this forum article] for information about Linux on PineTime. Also check out the article [https://lupyuen.github.io/pinetime-rust-mynewt/articles/pinetime &amp;quot;PineTime doesn't run Linux... But that's OK!&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
=== Why are there two versions of the PineTime in the store? ===&lt;br /&gt;
See the below question and answer&lt;br /&gt;
&lt;br /&gt;
=== Why can I only buy the closed version in a 3-pack, and the open version per one? ===&lt;br /&gt;
&lt;br /&gt;
TL:DR: The open PineTime is to develop on, The closed one only for production use, because of firmware uploads. That is why they are sold per 3. &lt;br /&gt;
&lt;br /&gt;
In the current situation in development there are some reasons to want to be sure you only experiment with an open device. If you install the wrong firmware, your device could be bricked, until you find a way to open it, which will likely damage the device.&lt;br /&gt;
The idea is that if you want to develop an application for the PineTime, you will be testing it out first, and only after you know for sure your new firmware is well tested, you will install it on deployment devices. If you are in the deploy stage, having more than one PineTime is likely the point. So to prevent people from locking themselves out at the first test, it was decided to sell the closed version only as a pack of 3. Development can be done on an open device, so any issues can be easily handled.&lt;br /&gt;
&lt;br /&gt;
=== How long does it take to ship my PineTime? ===&lt;br /&gt;
&lt;br /&gt;
That depends on whether you chose for Standard or Express shipping. Standard shipping for the dev kit may take up to a few weeks.&lt;br /&gt;
&lt;br /&gt;
=== How do I install new software on PineTime? ===&lt;br /&gt;
&lt;br /&gt;
The nRF Connect mobile app (Android and iOS) may also be used to update the firmware on your PineTime. See [https://lupyuen.github.io/pinetime-rust-mynewt/articles/cloud#download-and-test-our-pinetime-firmware &amp;quot;Download and Test Our PineTime Firmware&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Also see [[Reprogramming_the_PineTime|this page to see various methods of reprogramming the devkit PineTime the wired way]].&lt;br /&gt;
&lt;br /&gt;
If you have a Sealed PineTime, flash only Certified PineTime Firmware to your PineTime. If you flash non-Certified PineTime Firmware, your Sealed PineTime may be bricked permanently.&lt;br /&gt;
&lt;br /&gt;
The only Certified PineTime Firmware available today is [https://github.com/JF002/InfiniTime/releases/tag/0.14.0 InfiniTime 0.14.0]. Download the file &amp;quot;dfu-0.14.0.zip&amp;quot; under &amp;quot;Assets&amp;quot; and flash to PineTime with nRF Connect. Refer to the instructions here: [https://lupyuen.github.io/pinetime-rust-mynewt/articles/cloud#download-and-test-our-pinetime-firmware &amp;quot;Download and Test Our PineTime Firmware&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Remember to validate the firmware after flashing: Swipe up to show the menu, tap the Ticks icon, tap &amp;quot;Validate&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== My PineTime arrived, now what? ===&lt;br /&gt;
&lt;br /&gt;
You should start by testing out all the features of the watch, to make sure everything works. Power it on and check the display.&lt;br /&gt;
&lt;br /&gt;
PineTime is shipped with InfiniTime firmware. Press the watch button to show the clock, then swipe up on the touchscreen to reveal the menu.&lt;br /&gt;
&lt;br /&gt;
On your Android phone, install the nRF Connect mobile app to sync the date and time with PineTime. See [https://lupyuen.github.io/pinetime-rust-mynewt/articles/cloud#set-pinetime-date-and-time-with-nrf-connect &amp;quot;Set PineTime Date and Time with nRF Connect&amp;quot;] (nRF Connect on iOS can't be used for setting the date and time, because it doesn't implement the GATT Time Service)&lt;br /&gt;
&lt;br /&gt;
Download the latest Certified PineTime Firmware (see the previous question) and flash to PineTime with nRF Connect. Refer to the instructions here: [https://lupyuen.github.io/pinetime-rust-mynewt/articles/cloud#download-and-test-our-pinetime-firmware &amp;quot;Download and Test Our PineTime Firmware&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Remember to validate the firmware after flashing: Swipe up to show the menu, tap the Ticks icon, tap &amp;quot;Validate&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== What's the OS that's preinstalled on the PineTime by default? ===&lt;br /&gt;
&lt;br /&gt;
PineTime ships with the open source [https://github.com/JF002/InfiniTime InfiniTime firmware].&lt;br /&gt;
&lt;br /&gt;
To support firmware update and rollback, PineTime includes the open source [https://lupyuen.github.io/pinetime-rust-mynewt/articles/mcuboot MCUBoot Bootloader].&lt;br /&gt;
&lt;br /&gt;
=== Can we use this OS or its source code? ===&lt;br /&gt;
&lt;br /&gt;
Yes, [https://github.com/JF002/InfiniTime InfiniTime] and the [https://lupyuen.github.io/pinetime-rust-mynewt/articles/mcuboot MCUBoot Bootloader] are open source.&lt;br /&gt;
&lt;br /&gt;
=== Why is the back exposed? Is it supposed to snap on? ===&lt;br /&gt;
&lt;br /&gt;
The back cover of the PineTime dev kit is exposed so that you can flash and debug the device with the SWD pins. The main unit and cover does not snap (lock) together. If you want to attach the back cover anyway, you can use glue or tape.&lt;br /&gt;
&lt;br /&gt;
=== What hardware should I use to flash code to the PineTime? ===&lt;br /&gt;
&lt;br /&gt;
There are several ways you can do this, check out [[Reprogramming the PineTime]]&lt;br /&gt;
&lt;br /&gt;
=== How do I connect the PineTime to a programmer? ===&lt;br /&gt;
&lt;br /&gt;
Here's how: [[PineTime devkit wiring]]&lt;br /&gt;
&lt;br /&gt;
=== How do I set the time on PineTime? ===&lt;br /&gt;
&lt;br /&gt;
You can use either nRF Connect, custom GadgetBridge build or the proprietary Da Fit app. See [https://lupyuen.github.io/pinetime-rust-mynewt/articles/cloud#set-pinetime-date-and-time-with-nrf-connect &amp;quot;Set PineTime Date and Time with nRF Connect&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
You can also set the time using your PinePhone or other Linux-based Bluetooth LE capable device with the Bluez software installed. Install the bluez package and make sure your PineTime is running and awake with InfiniTime 0.7.1 or later.&lt;br /&gt;
&lt;br /&gt;
  $ bluetoothctl&lt;br /&gt;
  [ bluetooth ]# scan on&lt;br /&gt;
  ...&lt;br /&gt;
  [NEW] Device D7:03:FB:6E:31:B2 Pinetime-JF&lt;br /&gt;
  ...&lt;br /&gt;
  [bluetooth]# pair D7:03:FB:6E:31:B2&lt;br /&gt;
  Attempting to pair with D7:03:FB:6E:31:B2&lt;br /&gt;
  ...&lt;br /&gt;
  [NEW] Characteristic (Handle 0xfd80)&lt;br /&gt;
    /org/bluez/hci0/dev_D7_03_FB_6E_31_B2/service0015/char0016&lt;br /&gt;
    00002a2b-0000-1000-8000-00805f9b34fb&lt;br /&gt;
    Current Time&lt;br /&gt;
  ...&lt;br /&gt;
  [Pinetime-JF]# menu gatt&lt;br /&gt;
  ...&lt;br /&gt;
  [Pinetime-JF]# select-attribute /org/bluez/hci0/dev_D7_03_FB_6E_31_B2/service0015/char0016&lt;br /&gt;
  [Pinetime-JF:/service0015/char0016]# read&lt;br /&gt;
  Attempting to read /org/bluez/hci0/dev_D7_03_FB_6E_31_B2/service0015/char0016&lt;br /&gt;
  [CHG] Attribute /org/bluez/hci0/dev_D7_03_FB_6E_31_B2/service0015/char0016 Value:&lt;br /&gt;
    b2 07 01 01 00 04 15 00 00                       .........       &lt;br /&gt;
    b2 07 01 01 00 04 15 00 00                       .........&lt;br /&gt;
  [Pinetime-JF:/service0015/char0016]# write &amp;quot;0xe4 0x07 0x0c 0x1f 0x0e 0x02 0x00 0x00 0x00&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is the format for the current time as hex bytes:&lt;br /&gt;
  &amp;lt;lsb of year&amp;gt; &amp;lt;msb of year&amp;gt; &amp;lt;month (1-12)&amp;gt; &amp;lt;day (1-31)&amp;gt; &amp;lt;hour (0-23)&amp;gt; &amp;lt;minute (0-59)&amp;gt; &amp;lt;seconds (0-59)&amp;gt; &amp;lt;weekday (1-7 where 1=Monday)&amp;gt; &amp;lt;fractions (1/256th of second)&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Is there a standard agreed method of pushing OTA updates so that one could seal the PineTime dev kit nicely? ===&lt;br /&gt;
&lt;br /&gt;
InfiniTime supports firmware updates over Bluetooth LE with the nRF Connect mobile app. See [https://lupyuen.github.io/pinetime-rust-mynewt/articles/cloud#download-and-test-our-pinetime-firmware &amp;quot;Download and Test Our PineTime Firmware&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
=== My PineTime's screen shows garbage, how do I fix it? ===&lt;br /&gt;
&lt;br /&gt;
This is usually caused by unplugging the device after it has booted, it needs to be reinitialised. To do so just restart the watch by removing power to it.&lt;br /&gt;
&lt;br /&gt;
=== I have experience developing on Arduino. How does the PineTime compare? ===&lt;br /&gt;
&lt;br /&gt;
To learn programming on PineTime, [https://lupyuen.github.io/pinetime-rust-mynewt/articles/cloud check out this article]&lt;br /&gt;
&lt;br /&gt;
Arduino provides the Arduino IDE (or you use the avr-gcc and avrdude command-line tools) which you can use to compile and upload code to an Arduino board. The PineTime and its ARM processor doesn't have this, so you'll have to familiarize yourself with tools like GCC for ARM, and OpenOCD. Some experience with Arduino does translate over to the PineTime, especially if you've worked with LCD's, or SPI. The PineTime is at least four times faster than an Arduino Uno (even faster at certain specific workloads due to hardware acceleration), and it has 32 times more RAM and 16 times more flash storage.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/lupyuen/ Lup Yuen Lee] (just call him Lup, rhymes with &amp;quot;Up&amp;quot;) has written many articles on PineTime programming. [https://lupyuen.github.io/ Check out the articles here]&lt;br /&gt;
&lt;br /&gt;
=== Can I code firmware for PineTime without an actual PineTime? ===&lt;br /&gt;
&lt;br /&gt;
Yes, you may code PineTime Watch Faces and preview them in a web browser (thanks to WebAssembly)...&lt;br /&gt;
&lt;br /&gt;
[https://lupyuen.github.io/pinetime-rust-mynewt/articles/simulator PineTime Simulator]&lt;br /&gt;
&lt;br /&gt;
Then flash your firmware remotely to a real PineTime via Telegram, and watch your firmware run in a live video stream...&lt;br /&gt;
&lt;br /&gt;
[https://github.com/lupyuen/remote-pinetime-bot/blob/master/README.md Remote PineTime]&lt;br /&gt;
&lt;br /&gt;
=== What do I need for building PineTime firmware locally on my computer? ===&lt;br /&gt;
&lt;br /&gt;
Most flavours of PineTime firmware (InfiniTime, Hypnos, Klok, wasp-os) will build fine on Linux (x64, Arm32, Arm64) and macOS. Just follow the instructions provided.&lt;br /&gt;
&lt;br /&gt;
Download version 9-2020-q2-update of the [https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads Arm Embedded Toolchain arm-none-eabi-gcc]. Other versions of gcc may have problems building the firmware correctly.&lt;br /&gt;
&lt;br /&gt;
On Windows, install [https://docs.microsoft.com/en-us/windows/wsl/about Windows Subsystem for Linux (WSL)] and execute the build steps inside the WSL Terminal (instead of the Windows Command Prompt). USB Programmers (like ST-Link and JLink) are not supported in WSL, so use the Windows Command Prompt to flash your built firmware to PineTime.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/lupyuen/pinetime-rust-mynewt/blob/master/README.md pinetime-rust-mynewt] firmware for PineTime supports building and flashing via the Windows Command Prompt (no need for MinGW and Docker).&lt;br /&gt;
&lt;br /&gt;
=== Can I use Pinebook Pro for developing PineTime? ===&lt;br /&gt;
&lt;br /&gt;
Yes, use version 9-2020-q2-update of the [https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads Arm Embedded Toolchain arm-none-eabi-gcc]. Other versions of gcc may have problems building the firmware correctly.&lt;br /&gt;
&lt;br /&gt;
=== What is ARM Semihosting? ===&lt;br /&gt;
&lt;br /&gt;
We use the SWD (Single Wire Debug) protocol created by ARM for flashing and debugging PineTime's nRF52832 microcontroller, which contains an ARM CPU. (SWD is derived from standard JTAG, but with fewer wires) With ARM CPUs you can trigger a software breakpoint, and allow the debugger (OpenOCD) to do something really nifty: Display a message, read console input, dump out a file, even read a file. That's called ARM Semihosting. [http://www.keil.com/support/man/docs/armcc/armcc_pge1358787046598.htm More about ARM Semihosting]&lt;br /&gt;
&lt;br /&gt;
=== What is OpenOCD? ===&lt;br /&gt;
&lt;br /&gt;
OpenOCD is Open On-Chip Debugger. It's the software that drives your microcontroller debugger/flasher. We need it for running any kind of flashing and debugging with Pi or ST-Link. gdb talks to OpenOCD for debugging firmware. gdb also works with VSCode for debugging firmware visually. [http://openocd.org/doc-release/html/About.html#What-is-OpenOCD_003f More about OpenOCD]&lt;br /&gt;
&lt;br /&gt;
Please use [https://xpack.github.io/openocd xPack OpenOCD] with PineTime. Other versions of OpenOCD seem to have problems with PineTime.&lt;br /&gt;
&lt;br /&gt;
=== How do I remove flash protection? ===&lt;br /&gt;
&lt;br /&gt;
PineTime watches shipped before 20 Sep 2020 have flash protection enabled.&lt;br /&gt;
&lt;br /&gt;
The flash protection can be removed using multiple different methods. If you don't have anything except the PineTime, not even a Raspberry Pi, then you have to order a programmer online: you can use a J-Link, CMSIS-DAP dongle and various other programmers. See [[Reprogramming_the_PineTime|this page to see various methods of reprogramming the PineTime]].&lt;br /&gt;
&lt;br /&gt;
If your PineTime was shipped after 20 Sep 2020, you don't need to remove flash protection. They are shipped with flash protection disabled. You can flash and debug PineTime right away with ST-Link, JLink and Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
=== Why can't you use ST-Link to remove nRF52 Flash Protection? ===&lt;br /&gt;
&lt;br /&gt;
Because ST-Link is a High Level Adapter. It doesn't really implement all SWD functions, just a subset (probably to keep the price low). More details in the section &amp;quot;Why Visual Studio Code with ST-Link (instead of nRFgo Studio with J-LINK)&amp;quot; in the article [https://medium.com/@ly.lee/coding-nrf52-with-rust-and-apache-mynewt-on-visual-studio-code-9521bcba6004?source=friends_link&amp;amp;sk=bb4e2523b922d0870259ab3fa696c7da &amp;quot;Coding nRF52 with Rust and Apache Mynewt on Visual Studio Code&amp;quot;].&lt;br /&gt;
&lt;br /&gt;
=== Since we need a low level SWD adapter like Raspberry Pi anyway, can we do everything on a Pi instead of ST-Link + Windows? ===&lt;br /&gt;
&lt;br /&gt;
Yes, Raspberry Pi works for flashing and debugging PineTime, even for removing flash protection. We have a special version of OpenOCD called OpenOCD SPI that talks to PineTime's SWD port over SPI (without bit-banging). See [https://github.com/lupyuen/pinetime-updater/blob/master/README.md PineTime Updater]&lt;br /&gt;
&lt;br /&gt;
=== Is there a 3D model of PineTime available somewhere? ===&lt;br /&gt;
&lt;br /&gt;
Not yet. Someone did design a cover you can snap on to keep the back shut. [https://www.thingiverse.com/thing:4172849 More details]&lt;br /&gt;
&lt;br /&gt;
=== Are there any alternatives to the wrist band provided with the PineTime? ===&lt;br /&gt;
&lt;br /&gt;
No, but PineTime accepts standard 20mm wrist band that is widely available by a third party.&lt;br /&gt;
&lt;br /&gt;
Note that some sellers have a different point of view on what standard is. So you should always check the fitting to make sure it looks like the one used by PineTime.&lt;br /&gt;
&lt;br /&gt;
=== I'm stuck. How can I get help? ===&lt;br /&gt;
&lt;br /&gt;
Chat with the PineTime Community on [[PineTime#Community|Matrix / Discord / Telegram / IRC]] (They are bridged into a single chatroom)&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=InfiniTime&amp;diff=9338</id>
		<title>InfiniTime</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=InfiniTime&amp;diff=9338"/>
		<updated>2021-02-24T21:17:37Z</updated>

		<summary type="html">&lt;p&gt;Avamander: /* Black screen after a reset in sleep mode */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== InfiniTime ==&lt;br /&gt;
InfiniTime (also known as JF's project, FreeRTOS firmware or Pinetime-JF) is an open source (GPLv3) firmware written in C++ and based on FreeRTOS, LVGL and NimBLE. This firmware (version 0.7.1) is preloaded at the factory since the new batch of PineTime devkits and sealed PineTimes of end of September 2020.&lt;br /&gt;
&lt;br /&gt;
* Github repo : https://github.com/JF002/InfiniTime&lt;br /&gt;
* Official website : https://infinitime.io/&lt;br /&gt;
&lt;br /&gt;
== Read this first! ==&lt;br /&gt;
* PineTime is still considered as a development device. InfiniTime and the bootloader are still in heavy development, and some features might not work as expected.&lt;br /&gt;
* OTA is a critical feature which is still considered as risky on sealed devices. There is no known way to recover a sealed device from a failed OTA upgrade.&lt;br /&gt;
* There is currently no way to upgrade the bootloader on a sealed device.&lt;br /&gt;
* Do not use a sealed PineTime as a development device, there is a lot of chances that you'll brick it.&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
{{warning|1=Please read this section carefully before upgrading the firmware on your PineTime, especially if you are using a sealed device!}}&lt;br /&gt;
=== Black screen after a reset in sleep mode ===&lt;br /&gt;
==== Description ====&lt;br /&gt;
This issue occurs if you are using the original bootloader (from InfiniTime 0.7.1), upgraded from InfiniTime 0.7.1 to 0.8.2 and the watch resets while the display is OFF : the watch is stuck on a black screen and does not respond to touch, button press or BLE.&lt;br /&gt;
&lt;br /&gt;
The reset can be triggered by the watchdog or manually by long pressing the button.&lt;br /&gt;
&lt;br /&gt;
This issue is caused by InfiniTime 0.8.2 that put the external SPI flash memory to sleep before switching the display off and by the bootloader that cannot wake the memory chip up. The bootloader is stuck in an infinite loop.&lt;br /&gt;
&lt;br /&gt;
More info : https://github.com/lupyuen/pinetime-rust-mynewt/issues/24 and https://github.com/JF002/InfiniTime/issues/60&lt;br /&gt;
&lt;br /&gt;
==== Workaround ====&lt;br /&gt;
On a development kit, a simple reset via SWD is needed to unlock the bootloader.&lt;br /&gt;
&lt;br /&gt;
On a sealed device, the only way to work around this issue is to wait for the battery to drain completely before trying again.&lt;br /&gt;
&lt;br /&gt;
This issue can be avoided by ensuring that the display is ON when manually resetting the device (long push on the button).&lt;br /&gt;
&lt;br /&gt;
==== Fixed version ====&lt;br /&gt;
This issues is fixed in [https://github.com/JF002/InfiniTime/releases/tag/0.8.3 InfiniTime 0.8.3]&lt;br /&gt;
&lt;br /&gt;
== Releases == &lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.7.1 Version 0.7.1] ===&lt;br /&gt;
This is the version that ships with PineTime devkits and sealed PineTime as of September 2020.&lt;br /&gt;
* Time synchronization over BLE&lt;br /&gt;
* Display brightness setting&lt;br /&gt;
* Notifications over BLE&lt;br /&gt;
* Integration with AmazFish (SailFishOS) and Gadgetbridge (Android)&lt;br /&gt;
* OTA using NRFConnect&lt;br /&gt;
&lt;br /&gt;
Bootloader : https://github.com/lupyuen/pinetime-rust-mynewt/releases/tag/v4.1.7&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.8.2 Version 0.8.2] ===&lt;br /&gt;
* Music control app&lt;br /&gt;
* Paint app&lt;br /&gt;
* Manual image validation after OTA&lt;br /&gt;
&lt;br /&gt;
Bootloader : https://github.com/lupyuen/pinetime-rust-mynewt/releases/tag/v5.0.4.&lt;br /&gt;
&lt;br /&gt;
This new version of the bootloader fixes [[#Black_screen_after_a_reset_in_sleep_mode]] and enables the watchdog before launching the firmware.&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.8.3 Version 0.8.3] ===&lt;br /&gt;
* Fixes the &amp;quot;bootloader stuck after a reset&amp;quot; mentioned in 0.8.2 above&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.9.0 Version 0.9.0] ===&lt;br /&gt;
* Touch panel fixed (no more freezing)&lt;br /&gt;
* Improved music application (possibility to control both volumes and browsing, display the song progression)&lt;br /&gt;
* Notification UI rewritten: can now display up to 100 characters&lt;br /&gt;
* Improved BLE connectivity&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.10.0 Version 0.10.0] ===&lt;br /&gt;
* 2 new games: Pong and 2048&lt;br /&gt;
* Fixed display glitches and improved needed time to turn on the display&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.11.0 Version 0.11.0] ===&lt;br /&gt;
* Heart-rate sensor application:&lt;br /&gt;
  * Displays the current value, and when running, this value is also displayed on the clock face&lt;br /&gt;
  * Value exposed over BLE, meaning other applications can read it (e.g. companion app such as Amazfish)&lt;br /&gt;
* Navigation app: InfiNav - works e.g. with PureMaps on SailfishOS&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.12.0 Version 0.12.0] ===&lt;br /&gt;
* Improved BLE connection&lt;br /&gt;
* OTA updates much more reliable&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.13.0 Version 0.13.0] ===&lt;br /&gt;
* Vibration&lt;br /&gt;
* Call notification: it is possible to accept/ignore/reject a call from the PineTime&lt;br /&gt;
* Music app got nicer icons&lt;br /&gt;
* BLE connectivity improved a bit more&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.14.0 Version 0.14.0] ===&lt;br /&gt;
* LVGL 7&lt;br /&gt;
* Bugfixes to the build process&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=InfiniTime&amp;diff=9337</id>
		<title>InfiniTime</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=InfiniTime&amp;diff=9337"/>
		<updated>2021-02-24T21:17:08Z</updated>

		<summary type="html">&lt;p&gt;Avamander: /* Version 0.14.0 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== InfiniTime ==&lt;br /&gt;
InfiniTime (also known as JF's project, FreeRTOS firmware or Pinetime-JF) is an open source (GPLv3) firmware written in C++ and based on FreeRTOS, LVGL and NimBLE. This firmware (version 0.7.1) is preloaded at the factory since the new batch of PineTime devkits and sealed PineTimes of end of September 2020.&lt;br /&gt;
&lt;br /&gt;
* Github repo : https://github.com/JF002/InfiniTime&lt;br /&gt;
* Official website : https://infinitime.io/&lt;br /&gt;
&lt;br /&gt;
== Read this first! ==&lt;br /&gt;
* PineTime is still considered as a development device. InfiniTime and the bootloader are still in heavy development, and some features might not work as expected.&lt;br /&gt;
* OTA is a critical feature which is still considered as risky on sealed devices. There is no known way to recover a sealed device from a failed OTA upgrade.&lt;br /&gt;
* There is currently no way to upgrade the bootloader on a sealed device.&lt;br /&gt;
* Do not use a sealed PineTime as a development device, there is a lot of chances that you'll brick it.&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
{{warning|1=Please read this section carefully before upgrading the firmware on your PineTime, especially if you are using a sealed device!}}&lt;br /&gt;
=== Black screen after a reset in sleep mode ===&lt;br /&gt;
==== Description ====&lt;br /&gt;
This issue occurs if you are using the original bootloader (from InfiniTime 0.7.1), upgraded from InfiniTime 0.7.1 to 0.8.2 and the watch resets while the display is OFF : the watch is stuck on a black screen and does not respond to touch, button press or BLE.&lt;br /&gt;
&lt;br /&gt;
The reset can be triggered by the watchdog or manually by long pressing the button.&lt;br /&gt;
&lt;br /&gt;
This issue is caused by InfiniTime 0.8.2 that put the external SPI flash memory to sleep before switching the display off and by the bootloader that cannot wake the memory chip up. The bootloader is stuck in an infinite loop.&lt;br /&gt;
&lt;br /&gt;
More info : https://github.com/lupyuen/pinetime-rust-mynewt/issues/24 and https://github.com/JF002/Pinetime/issues/60&lt;br /&gt;
&lt;br /&gt;
==== Workaround ====&lt;br /&gt;
On a development kit, a simple reset via SWD is needed to unlock the bootloader.&lt;br /&gt;
&lt;br /&gt;
On a sealed device, the only way to work around this issue is to wait for the battery to drain completely before trying again.&lt;br /&gt;
&lt;br /&gt;
This issue can be avoided by ensuring that the display is ON when manually resetting the device (long push on the button).&lt;br /&gt;
&lt;br /&gt;
==== Fixed version ====&lt;br /&gt;
This issues is fixed in [https://github.com/JF002/Pinetime/releases/tag/0.8.3 InfiniTime 0.8.3]&lt;br /&gt;
&lt;br /&gt;
== Releases == &lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.7.1 Version 0.7.1] ===&lt;br /&gt;
This is the version that ships with PineTime devkits and sealed PineTime as of September 2020.&lt;br /&gt;
* Time synchronization over BLE&lt;br /&gt;
* Display brightness setting&lt;br /&gt;
* Notifications over BLE&lt;br /&gt;
* Integration with AmazFish (SailFishOS) and Gadgetbridge (Android)&lt;br /&gt;
* OTA using NRFConnect&lt;br /&gt;
&lt;br /&gt;
Bootloader : https://github.com/lupyuen/pinetime-rust-mynewt/releases/tag/v4.1.7&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.8.2 Version 0.8.2] ===&lt;br /&gt;
* Music control app&lt;br /&gt;
* Paint app&lt;br /&gt;
* Manual image validation after OTA&lt;br /&gt;
&lt;br /&gt;
Bootloader : https://github.com/lupyuen/pinetime-rust-mynewt/releases/tag/v5.0.4.&lt;br /&gt;
&lt;br /&gt;
This new version of the bootloader fixes [[#Black_screen_after_a_reset_in_sleep_mode]] and enables the watchdog before launching the firmware.&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.8.3 Version 0.8.3] ===&lt;br /&gt;
* Fixes the &amp;quot;bootloader stuck after a reset&amp;quot; mentioned in 0.8.2 above&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.9.0 Version 0.9.0] ===&lt;br /&gt;
* Touch panel fixed (no more freezing)&lt;br /&gt;
* Improved music application (possibility to control both volumes and browsing, display the song progression)&lt;br /&gt;
* Notification UI rewritten: can now display up to 100 characters&lt;br /&gt;
* Improved BLE connectivity&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.10.0 Version 0.10.0] ===&lt;br /&gt;
* 2 new games: Pong and 2048&lt;br /&gt;
* Fixed display glitches and improved needed time to turn on the display&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.11.0 Version 0.11.0] ===&lt;br /&gt;
* Heart-rate sensor application:&lt;br /&gt;
  * Displays the current value, and when running, this value is also displayed on the clock face&lt;br /&gt;
  * Value exposed over BLE, meaning other applications can read it (e.g. companion app such as Amazfish)&lt;br /&gt;
* Navigation app: InfiNav - works e.g. with PureMaps on SailfishOS&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.12.0 Version 0.12.0] ===&lt;br /&gt;
* Improved BLE connection&lt;br /&gt;
* OTA updates much more reliable&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.13.0 Version 0.13.0] ===&lt;br /&gt;
* Vibration&lt;br /&gt;
* Call notification: it is possible to accept/ignore/reject a call from the PineTime&lt;br /&gt;
* Music app got nicer icons&lt;br /&gt;
* BLE connectivity improved a bit more&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.14.0 Version 0.14.0] ===&lt;br /&gt;
* LVGL 7&lt;br /&gt;
* Bugfixes to the build process&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=InfiniTime&amp;diff=9336</id>
		<title>InfiniTime</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=InfiniTime&amp;diff=9336"/>
		<updated>2021-02-24T21:16:53Z</updated>

		<summary type="html">&lt;p&gt;Avamander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== InfiniTime ==&lt;br /&gt;
InfiniTime (also known as JF's project, FreeRTOS firmware or Pinetime-JF) is an open source (GPLv3) firmware written in C++ and based on FreeRTOS, LVGL and NimBLE. This firmware (version 0.7.1) is preloaded at the factory since the new batch of PineTime devkits and sealed PineTimes of end of September 2020.&lt;br /&gt;
&lt;br /&gt;
* Github repo : https://github.com/JF002/InfiniTime&lt;br /&gt;
* Official website : https://infinitime.io/&lt;br /&gt;
&lt;br /&gt;
== Read this first! ==&lt;br /&gt;
* PineTime is still considered as a development device. InfiniTime and the bootloader are still in heavy development, and some features might not work as expected.&lt;br /&gt;
* OTA is a critical feature which is still considered as risky on sealed devices. There is no known way to recover a sealed device from a failed OTA upgrade.&lt;br /&gt;
* There is currently no way to upgrade the bootloader on a sealed device.&lt;br /&gt;
* Do not use a sealed PineTime as a development device, there is a lot of chances that you'll brick it.&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
{{warning|1=Please read this section carefully before upgrading the firmware on your PineTime, especially if you are using a sealed device!}}&lt;br /&gt;
=== Black screen after a reset in sleep mode ===&lt;br /&gt;
==== Description ====&lt;br /&gt;
This issue occurs if you are using the original bootloader (from InfiniTime 0.7.1), upgraded from InfiniTime 0.7.1 to 0.8.2 and the watch resets while the display is OFF : the watch is stuck on a black screen and does not respond to touch, button press or BLE.&lt;br /&gt;
&lt;br /&gt;
The reset can be triggered by the watchdog or manually by long pressing the button.&lt;br /&gt;
&lt;br /&gt;
This issue is caused by InfiniTime 0.8.2 that put the external SPI flash memory to sleep before switching the display off and by the bootloader that cannot wake the memory chip up. The bootloader is stuck in an infinite loop.&lt;br /&gt;
&lt;br /&gt;
More info : https://github.com/lupyuen/pinetime-rust-mynewt/issues/24 and https://github.com/JF002/Pinetime/issues/60&lt;br /&gt;
&lt;br /&gt;
==== Workaround ====&lt;br /&gt;
On a development kit, a simple reset via SWD is needed to unlock the bootloader.&lt;br /&gt;
&lt;br /&gt;
On a sealed device, the only way to work around this issue is to wait for the battery to drain completely before trying again.&lt;br /&gt;
&lt;br /&gt;
This issue can be avoided by ensuring that the display is ON when manually resetting the device (long push on the button).&lt;br /&gt;
&lt;br /&gt;
==== Fixed version ====&lt;br /&gt;
This issues is fixed in [https://github.com/JF002/Pinetime/releases/tag/0.8.3 InfiniTime 0.8.3]&lt;br /&gt;
&lt;br /&gt;
== Releases == &lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.7.1 Version 0.7.1] ===&lt;br /&gt;
This is the version that ships with PineTime devkits and sealed PineTime as of September 2020.&lt;br /&gt;
* Time synchronization over BLE&lt;br /&gt;
* Display brightness setting&lt;br /&gt;
* Notifications over BLE&lt;br /&gt;
* Integration with AmazFish (SailFishOS) and Gadgetbridge (Android)&lt;br /&gt;
* OTA using NRFConnect&lt;br /&gt;
&lt;br /&gt;
Bootloader : https://github.com/lupyuen/pinetime-rust-mynewt/releases/tag/v4.1.7&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.8.2 Version 0.8.2] ===&lt;br /&gt;
* Music control app&lt;br /&gt;
* Paint app&lt;br /&gt;
* Manual image validation after OTA&lt;br /&gt;
&lt;br /&gt;
Bootloader : https://github.com/lupyuen/pinetime-rust-mynewt/releases/tag/v5.0.4.&lt;br /&gt;
&lt;br /&gt;
This new version of the bootloader fixes [[#Black_screen_after_a_reset_in_sleep_mode]] and enables the watchdog before launching the firmware.&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.8.3 Version 0.8.3] ===&lt;br /&gt;
* Fixes the &amp;quot;bootloader stuck after a reset&amp;quot; mentioned in 0.8.2 above&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.9.0 Version 0.9.0] ===&lt;br /&gt;
* Touch panel fixed (no more freezing)&lt;br /&gt;
* Improved music application (possibility to control both volumes and browsing, display the song progression)&lt;br /&gt;
* Notification UI rewritten: can now display up to 100 characters&lt;br /&gt;
* Improved BLE connectivity&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.10.0 Version 0.10.0] ===&lt;br /&gt;
* 2 new games: Pong and 2048&lt;br /&gt;
* Fixed display glitches and improved needed time to turn on the display&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.11.0 Version 0.11.0] ===&lt;br /&gt;
* Heart-rate sensor application:&lt;br /&gt;
  * Displays the current value, and when running, this value is also displayed on the clock face&lt;br /&gt;
  * Value exposed over BLE, meaning other applications can read it (e.g. companion app such as Amazfish)&lt;br /&gt;
* Navigation app: InfiNav - works e.g. with PureMaps on SailfishOS&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.12.0 Version 0.12.0] ===&lt;br /&gt;
* Improved BLE connection&lt;br /&gt;
* OTA updates much more reliable&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.13.0 Version 0.13.0] ===&lt;br /&gt;
* Vibration&lt;br /&gt;
* Call notification: it is possible to accept/ignore/reject a call from the PineTime&lt;br /&gt;
* Music app got nicer icons&lt;br /&gt;
* BLE connectivity improved a bit more&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/JF002/InfiniTime/releases/tag/0.14.0 Version 0.14.0] ===&lt;br /&gt;
* **LVGL 7**&lt;br /&gt;
* Bugfixes to the build process&lt;br /&gt;
&lt;br /&gt;
[[Category:PineTime]]&lt;/div&gt;</summary>
		<author><name>Avamander</name></author>
	</entry>
</feed>