forked from M-Labs/thermostat
Compare commits
4 Commits
master
...
shorter_ma
Author | SHA1 | Date | |
---|---|---|---|
2731df7813 | |||
677cdbdc12 | |||
31f7e7eead | |||
6473b27539 |
34
README.md
34
README.md
@ -1,28 +1,30 @@
|
|||||||
# Firmware for the Sinara 8451 Thermostat
|
# Firmware for the Sinara 8451 Thermostat
|
||||||
|
|
||||||
- [x] [Continuous Integration](https://nixbld.m-labs.hk/job/mcu/mcu/thermostat)
|
- [x] [Continuous Integration](https://nixbld.m-labs.hk/job/stm32/stm32/thermostat)
|
||||||
- [x] Download latest firmware build: [ELF](https://nixbld.m-labs.hk/job/mcu/mcu/thermostat/latest/download/1) [BIN](https://nixbld.m-labs.hk/job/mcu/mcu/thermostat/latest/download/2)
|
- [x] Download latest firmware build: [ELF](https://nixbld.m-labs.hk/job/stm32/stm32/thermostat/latest/download/1) [BIN](https://nixbld.m-labs.hk/job/stm32/stm32/thermostat/latest/download/2)
|
||||||
|
|
||||||
|
|
||||||
## Building
|
## Building
|
||||||
|
|
||||||
### Reproducible build with Nix
|
### Reproducible build with Nix
|
||||||
|
|
||||||
See the `mcu` folder of the [nix-scripts repository](https://git.m-labs.hk/M-Labs/nix-scripts).
|
See the `stm32` folder of the [nix-scripts repository](https://git.m-labs.hk/M-Labs/nix-scripts).
|
||||||
|
|
||||||
### Development environment
|
### Debian-based systems (tested on Ubuntu 19.10)
|
||||||
|
|
||||||
Clone this repository and [nix-scripts](https://git.m-labs.hk/M-Labs/nix-scripts).
|
- install git, clone this repository
|
||||||
|
- install [rustup](https://rustup.rs/)
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
nix-shell -I nix-scripts=[path to nix-scripts checkout]
|
rustup toolchain install nightly
|
||||||
|
rustup update
|
||||||
|
rustup target add thumbv7em-none-eabihf --toolchain nightly
|
||||||
|
rustup default nightly
|
||||||
cargo build --release
|
cargo build --release
|
||||||
```
|
```
|
||||||
|
|
||||||
The resulting ELF file will be located under `target/thumbv7em-none-eabihf/release/thermostat`
|
The resulting ELF file will be located under `target/thumbv7em-none-eabihf/release/thermostat`
|
||||||
|
|
||||||
Alternatively, you can install the Rust toolchain without Nix using rustup; see the channel manifest file in nix-scripts (`channel-rust-nightly.toml`) to determine which Rust version to use.
|
|
||||||
|
|
||||||
## Debugging
|
## Debugging
|
||||||
|
|
||||||
Connect SWDIO/SWCLK/RST/GND to a programmer such as ST-Link v2.1. Run OpenOCD:
|
Connect SWDIO/SWCLK/RST/GND to a programmer such as ST-Link v2.1. Run OpenOCD:
|
||||||
@ -43,7 +45,7 @@ There are several options for flashing Thermostat. DFU requires only a micro-USB
|
|||||||
|
|
||||||
### dfu-util on Linux
|
### dfu-util on Linux
|
||||||
* Install the DFU USB tool (dfu-util).
|
* Install the DFU USB tool (dfu-util).
|
||||||
* Convert firmware from ELF to BIN: `arm-none-eabi-objcopy -O binary thermostat thermostat.bin` (you can skip this step if using the BIN from Hydra)
|
* Convert firmware from ELF to BIN: `arm-none-eabi-objcopy -O binary thermostat.elf thermostat.bin` (you can skip this step if using the BIN from Hydra)
|
||||||
* Connect to the Micro USB connector to Thermostat below the RJ45.
|
* Connect to the Micro USB connector to Thermostat below the RJ45.
|
||||||
* Add jumper to Thermostat v2.0 across 2-pin jumper adjacent to JTAG connector.
|
* Add jumper to Thermostat v2.0 across 2-pin jumper adjacent to JTAG connector.
|
||||||
* Cycle board power to put it in DFU update mode
|
* Cycle board power to put it in DFU update mode
|
||||||
@ -98,12 +100,12 @@ formatted as line-delimited JSON.
|
|||||||
| `report mode` | Show current report mode |
|
| `report mode` | Show current report mode |
|
||||||
| `report mode <off/on>` | Set report mode |
|
| `report mode <off/on>` | Set report mode |
|
||||||
| `pwm` | Show current PWM settings |
|
| `pwm` | Show current PWM settings |
|
||||||
| `pwm <0/1> max_i_pos <amp>` | Set maximum positive output current |
|
| `pwm <0/1> max_i_pos <amp>` | Set PWM duty cycle for **max_i_pos** to *ampere* |
|
||||||
| `pwm <0/1> max_i_neg <amp>` | Set maximum negative output current |
|
| `pwm <0/1> max_i_neg <amp>` | Set PWM duty cycle for **max_i_neg** to *- ampere* |
|
||||||
| `pwm <0/1> max_v <volt>` | Set maximum output voltage |
|
| `pwm <0/1> max_v <volts>` | Set PWM duty cycle for **max_v** to *volt* |
|
||||||
| `pwm <0/1> i_set <amp>` | Disengage PID, set fixed output current |
|
| `pwm <0/1> i_set <amp>` | Disengage PID, set **i_set** DAC to *ampere* |
|
||||||
| `pwm <0/1> pid` | Let output current to be controlled by the PID |
|
| `pwm <0/1> pid` | Set PWM to be controlled by PID |
|
||||||
| `center <0/1> <volt>` | Set the MAX1968 0A-centerpoint to the specified fixed voltage |
|
| `center <0/1> <volts>` | Set the MAX1968 0A-centerpoint to *volts* |
|
||||||
| `center <0/1> vref` | Set the MAX1968 0A-centerpoint to measure from VREF |
|
| `center <0/1> vref` | Set the MAX1968 0A-centerpoint to measure from VREF |
|
||||||
| `pid` | Show PID configuration |
|
| `pid` | Show PID configuration |
|
||||||
| `pid <0/1> target <deg_celsius>` | Set the PID controller target temperature |
|
| `pid <0/1> target <deg_celsius>` | Set the PID controller target temperature |
|
||||||
@ -122,7 +124,7 @@ formatted as line-delimited JSON.
|
|||||||
| `load [0/1]` | Restore configuration for channel all/0/1 from flash |
|
| `load [0/1]` | Restore configuration for channel all/0/1 from flash |
|
||||||
| `save [0/1]` | Save configuration for channel all/0/1 to flash |
|
| `save [0/1]` | Save configuration for channel all/0/1 to flash |
|
||||||
| `reset` | Reset the device |
|
| `reset` | Reset the device |
|
||||||
| `dfu` | Reset device and enters USB device firmware update (DFU) mode |
|
| `dfu` | Reset device and enters USB device firmware update (DFU) mode |
|
||||||
| `ipv4 <X.X.X.X/L> [Y.Y.Y.Y]` | Configure IPv4 address, netmask length, and optional default gateway |
|
| `ipv4 <X.X.X.X/L> [Y.Y.Y.Y]` | Configure IPv4 address, netmask length, and optional default gateway |
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ let
|
|||||||
if latestRustNightly
|
if latestRustNightly
|
||||||
then pkgs.rustChannelOfTargets "nightly" null [ "thumbv7em-none-eabihf" ]
|
then pkgs.rustChannelOfTargets "nightly" null [ "thumbv7em-none-eabihf" ]
|
||||||
else (pkgs.recurseIntoAttrs (
|
else (pkgs.recurseIntoAttrs (
|
||||||
pkgs.callPackage (import <nix-scripts/mcu/rustPlatform.nix>) {}
|
pkgs.callPackage (import <nix-scripts/stm32/rustPlatform.nix>) {}
|
||||||
)).rust.cargo;
|
)).rust.cargo;
|
||||||
in
|
in
|
||||||
pkgs.mkShell {
|
pkgs.mkShell {
|
||||||
|
Loading…
Reference in New Issue
Block a user