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
|
||||
|
||||
- [x] [Continuous Integration](https://nixbld.m-labs.hk/job/mcu/mcu/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] [Continuous Integration](https://nixbld.m-labs.hk/job/stm32/stm32/thermostat)
|
||||
- [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
|
||||
|
||||
### 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
|
||||
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
|
||||
```
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
* 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.
|
||||
* Add jumper to Thermostat v2.0 across 2-pin jumper adjacent to JTAG connector.
|
||||
* 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 <off/on>` | Set report mode |
|
||||
| `pwm` | Show current PWM settings |
|
||||
| `pwm <0/1> max_i_pos <amp>` | Set maximum positive output current |
|
||||
| `pwm <0/1> max_i_neg <amp>` | Set maximum negative output current |
|
||||
| `pwm <0/1> max_v <volt>` | Set maximum output voltage |
|
||||
| `pwm <0/1> i_set <amp>` | Disengage PID, set fixed output current |
|
||||
| `pwm <0/1> pid` | Let output current to be controlled by the PID |
|
||||
| `center <0/1> <volt>` | Set the MAX1968 0A-centerpoint to the specified fixed voltage |
|
||||
| `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 PWM duty cycle for **max_i_neg** to *- ampere* |
|
||||
| `pwm <0/1> max_v <volts>` | Set PWM duty cycle for **max_v** to *volt* |
|
||||
| `pwm <0/1> i_set <amp>` | Disengage PID, set **i_set** DAC to *ampere* |
|
||||
| `pwm <0/1> pid` | Set PWM to be controlled by PID |
|
||||
| `center <0/1> <volts>` | Set the MAX1968 0A-centerpoint to *volts* |
|
||||
| `center <0/1> vref` | Set the MAX1968 0A-centerpoint to measure from VREF |
|
||||
| `pid` | Show PID configuration |
|
||||
| `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 |
|
||||
| `save [0/1]` | Save configuration for channel all/0/1 to flash |
|
||||
| `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 |
|
||||
|
||||
|
||||
|
@ -9,7 +9,7 @@ let
|
||||
if latestRustNightly
|
||||
then pkgs.rustChannelOfTargets "nightly" null [ "thumbv7em-none-eabihf" ]
|
||||
else (pkgs.recurseIntoAttrs (
|
||||
pkgs.callPackage (import <nix-scripts/mcu/rustPlatform.nix>) {}
|
||||
pkgs.callPackage (import <nix-scripts/stm32/rustPlatform.nix>) {}
|
||||
)).rust.cargo;
|
||||
in
|
||||
pkgs.mkShell {
|
||||
|
Loading…
Reference in New Issue
Block a user