Skip to content

Commit 4950622

Browse files
Merge pull request #83 from Neotron-Compute/release-060
Release v0.6.0
2 parents d79368c + f5ae16d commit 4950622

File tree

11 files changed

+538
-370
lines changed

11 files changed

+538
-370
lines changed

CHANGELOG.md

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,19 @@ In this repository, changes are made in branches which are merged into **develop
66

77
* None
88

9+
## v0.6.0 ([Source](https://github.com/neotron-compute/neotron-pico-bios/tree/v0.6.0) | [Release](https://github.com/neotron-compute/neotron-pico-bios/release/tag/v0.6.0))
10+
11+
* Use OS 0.5.0
12+
* Implement reboot support
13+
* Hard reboot system if we detect only Core 0 has restarted - should fix odd
14+
video issue after flashing
15+
* Updated to neotron-common-bios 0.11.0
16+
* Changed the VGA palette to match as required in neotron-common-bios 0.10.0
17+
* Updated flashing instructions
18+
919
## v0.5.2 ([Source](https://github.com/neotron-compute/neotron-pico-bios/tree/v0.5.2) | [Release](https://github.com/neotron-compute/neotron-pico-bios/release/tag/v0.5.2))
1020

11-
* Update to neotron-common-bios 0.9.0
21+
* Updated to neotron-common-bios 0.9.0
1222
* Use published neotron-bmc-protocol and neotron-bmc-commands crates
1323
* Clarify how BMC speaker works
1424
* Add ANSI art boot-up logo
@@ -17,6 +27,8 @@ In this repository, changes are made in branches which are merged into **develop
1727
* Update to OS 0.4.0
1828
* Re-arrange BIOS memory and stack for Core 1
1929
* Re-wrote the video render system to be more robust
30+
* Added a cursor
31+
* Added ANSI decoding support (for basic colours)
2032

2133
## v0.5.1 ([Source](https://github.com/neotron-compute/neotron-pico-bios/tree/v0.5.1) | [Release](https://github.com/neotron-compute/neotron-pico-bios/release/tag/v0.5.1))
2234

@@ -37,15 +49,15 @@ In this repository, changes are made in branches which are merged into **develop
3749
* Implement new kind of Mutex
3850
* Updated to OS 0.3.2
3951
* Supports initialising SD Cards and reporting card size
40-
52+
4153
## v0.4.1 ([Source](https://github.com/neotron-compute/neotron-pico-bios/tree/v0.4.1) | [Release](https://github.com/neotron-compute/neotron-pico-bios/release/tag/v0.4.1))
4254

4355
* Wait for interrupts from the BMC before reading PS/2 key codes
44-
* Requires Neotron Pico BMC v0.5.0
56+
* Requires Neotron Pico BMC v0.5.0
4557
* Debug LEDs change every time you get an interrupt from the IO controller
4658
* Doubled the speed of the RP2040's QSPI flash interface
4759
* Documentation updates to make programming your RP2040 easier
48-
60+
4961
## v0.4.0 ([Source](https://github.com/neotron-compute/neotron-pico-bios/tree/v0.4.0) | [Release](https://github.com/neotron-compute/neotron-pico-bios/release/tag/v0.4.0))
5062

5163
* Updated dependencies

Cargo.lock

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ resolver = "2"
55
readme = "README.md"
66
license = "GPL-3.0-or-later"
77
name = "neotron-pico-bios"
8-
version = "0.5.2"
8+
version = "0.6.0"
99

1010
[dependencies]
1111
# Useful Cortex-M specific functions (e.g. SysTick)
@@ -19,7 +19,7 @@ rp-pico = { version = "0.7", default-features = false, features = [
1919
# Cortex-M run-time (or start-up) code
2020
cortex-m-rt = "0.7"
2121
# The BIOS to OS API
22-
neotron-common-bios = "0.9.0"
22+
neotron-common-bios = "0.11.0"
2323
# For the RP2040 bootloader
2424
rp2040-boot2 = "0.3.0"
2525
# For hardware abstraction traits
@@ -60,7 +60,7 @@ embedded-sdmmc = { version = "0.5", default-features = false, features = [
6060
] }
6161

6262
[build-dependencies]
63-
neotron-common-bios = "0.9.0"
63+
neotron-common-bios = "0.11.0"
6464
vte = "0.11"
6565

6666
[[bin]]

README.md

Lines changed: 123 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -5,95 +5,142 @@ Pico] board.
55

66
[Neotron Pico]: (https://github.com/neotron-compute/neotron-pico)
77

8-
![Build Status](https://github.com/neotron-compute/neotron-pico-bios/workflows/Build/badge.svg "Github Action Build Status")
8+
![Build Status](https://github.com/neotron-compute/neotron-pico-bios/actions/workflows/build.yml/badge.svg?branch=develop)
99

10-
![Format Status](https://github.com/neotron-compute/neotron-pico-bios/workflows/Format/badge.svg "Github Action Format Check Status")
10+
![Format Status](https://github.com/neotron-compute/neotron-pico-bios/actions/workflows/format.yml/badge.svg?branch=develop)
1111

1212
## Compatibility
1313

14-
This BIOS will run on the [Neotron Pico] v0.5.0. Other boards based around the
15-
Raspberry Pi Pico could be supported with just a minor change to the pin
16-
configurations.
14+
This BIOS will run on the [Neotron Pico] v1.0.0 and v1.1.0. Other boards based
15+
around the Raspberry Pi Pico could be supported with just a minor change to the
16+
pin configurations.
1717

18-
## Features
18+
## Hardware Features
1919

20-
The Neotron Pico offers:
20+
The Neotron Pico PCB offers:
2121

22-
* Dual Cortex-M0+ clocked at 133 MHz
22+
* Dual Cortex-M0+ clocked at ~~133 MHz~~ 151.2 MHz
2323
* 256 KiB RAM
2424
* 2048 KiB Flash
2525
* SD/MMC Slot
26-
* 4096-colour VGA output
27-
* Stereo 16-bit 48kHz audio
26+
* 640x480 VGA output
27+
* Stereo 16-bit 48 kHz audio
2828
* Four Neotron expansion slots
2929
* A dedicated Board Management Controller, offering:
3030
* Dual PS/2 ports
31-
* 5-wire TTL UART
31+
* 5-wire 3.3V TTL UART
3232
* Power/reset control
3333

34-
Currently the BIOS only uses a single core, and starts the OS on the same core.
35-
Later versions may move some functionality onto the second core (e.g. screen
36-
updates) for performance reasons.
34+
## Software Features
35+
36+
Currently the BIOS uses Core 0 for running the Neotron OS (and application code), and Core 1 for updating the video display and performing 80-column colour text rendering in real-time.
37+
38+
* [x] 640x480 @ 60 Hz text mode
39+
* [x] 80 columns, 60 rows, 8x8 font
40+
* [x] 80 columns, 30 rows, 8x16 font
41+
* [x] 16 foreground and 8 background colours
42+
* [x] Fixed font
43+
* [ ] Loadable soft-font
44+
* [x] 640x400 @ 70 Hz text mode
45+
* [x] 80 columns, 50 rows, 8x8 font
46+
* [x] 80 columns, 25 rows, 8x16 font
47+
* [x] 16 foreground and 8 background colours
48+
* [x] Fixed font
49+
* [ ] Loadable soft-font
50+
* [ ] 640x480 @ 60 Hz graphics mode
51+
* [ ] 1-bpp mode (2 colours) in 38 KiB
52+
* [ ] 2-bpp mode (4 colours) in 75 KiB
53+
* [ ] 4-bpp mode (4 colours) in 150 KiB
54+
* [ ] 320x240 @ 60 Hz grapics mode
55+
* [ ] 1-bpp mode (2 colours) in 10 KiB
56+
* [ ] 2-bpp mode (4 colours) in 19 KiB
57+
* [ ] 4-bpp mode (4 colours) in 38 KiB
58+
* [ ] 8-bpp mode (8 colours) in 75 KiB
59+
* [x] SPI Bus
60+
* [x] I2C Bus
61+
* [x] SPI I/O Expander for Chip Selects and LEDs
62+
* [x] External Interrupts
63+
* [x] SD Card support
64+
* [x] Read/write 512 byte blocks
65+
* [x] Insert/remove detection
66+
* [x] Communications with the BMC
67+
* [x] Reading from a PS/2 keyboard
68+
* [x] Sending beeps/boops to the PC Speaker
69+
* [ ] Writing to the PS/2 keyboard
70+
* [ ] Reading/writing to/from the PS/2 mouse
71+
* [ ] UART support
72+
* [ ] Second I2C Bus support
73+
* [ ] Volatage monitoring
74+
* [ ] Soft-power
75+
* [ ] Soft-reset
76+
* [x] Dallas or Microchip RTC support
77+
* [ ] Audio CODEC mixer programming
78+
* [ ] I2S Audio Output
79+
* [ ] I2S Audio Input
3780

3881
## Programming
3982

40-
The Neotron BIOS uses the [defmt](https://crates.io/crates/defmt) crate to provide structured logging over the SWD interface. The easiest way to flash and debug your Neotron Pico BIOS is with a second Raspberry Pi Pico.
83+
The Neotron BIOS uses the [defmt](https://crates.io/crates/defmt) crate to provide structured logging over the SWD interface. The easiest way to flash and debug your Neotron Pico BIOS is with a second Raspberry Pi Pico, or the official Raspberry Pi Debug Probe.
4184

42-
1. Connect your *Debugger* Pico to the *Neotron* Pico:
43-
* connect Pin 3 on the *Debugger* Pico to GND on the *Neotron* Pico
44-
* connect Pin 4 on the *Debugger* Pico to SWCLK on the *Neotron* Pico
45-
* connect Pin 5 on the *Debugger* Pico to SWDIO on the *Neotron* Pico
46-
* connect USB on the *Debugger* Pico to your PC
85+
1. If your BMC has not been programmed, do that first.
4786

48-
2. Flash your *Debugger* Pico with https://github.com/raspberrypi/picoprobe or https://github.com/majbthrd/DapperMime firmware (e.g. by copying the UF2 file to the USB Mass Storage device)
87+
2. Connect your *Debugger* Pico to the three *DEBUG* pins on the *Neotron* Pico, following the instructions for your particular debugging device or firmware.
4988

50-
3. On your PC, install [*probe-run*](https://github.com/knurling-rs/probe-run), the programming tool from [Ferrous System's](https://www.ferrous-systems.com) [Knurling Project](https://github.com/knurling).
89+
3. If your *Debugger* Pico was a bare Pi Pico (and not a Debug Probe) then flash it with <https://github.com/raspberrypi/picoprobe> or <https://github.com/majbthrd/DapperMime> firmware (e.g. by copying the UF2 file to the USB Mass Storage device)
5190

52-
We are temporarily stuck at 0.3.6 as 0.3.7 is broken and 0.3.8 doesn't support the RP2040. A 0.3.9 should be along shortly, but the logging binary format has changed, and we currently pin ourselves to a 0.3.6 compatible version.
91+
4. On your PC, install [*probe-run*](https://github.com/knurling-rs/probe-run), the programming tool from [Ferrous System's](https://www.ferrous-systems.com) [Knurling Project](https://github.com/knurling).
5392

54-
```sh
55-
cargo install probe-run --version=0.3.6
56-
```
93+
```sh
94+
cargo install probe-run
95+
```
5796

58-
4. Power on your Neotron Pico.
97+
5. Build the Neotron OS:
98+
We use the "neotron-flash-1002.ld" linker script to link it at `0x1002_0000`.
5999

60-
5. Build the Neotron OS
100+
```console
101+
user@host ~/neotron-os $ cargo build --bin=flash1002 --release --target=thumbv6m-none-eabi
102+
user@host ~/neotron-os $ arm-none-eabi-objcopy -O binary ./target/thumbv6m-none-eabi/release/flash1002 ../neotron-pico-bios/src/thumbv6m-none-eabi-flash1002-libneotron_os.bin
103+
```
61104

62-
We use the "neotron-flash-1002.ld" linker script to link it at `0x1002_0000`.
105+
5. Power on your Neotron Pico into bootloader mode by applying 12V, holding down
106+
the "BOOTSEL" button on the Raspberry Pi Pico and then and tapping the On/Off
107+
button on the Neotron.
63108

64-
```console
65-
user@host ~/neotron-os $ cargo build --bin=flash1002 --release --target=thumbv6m-none-eabi
66-
user@host ~/neotron-os $ arm-none-eabi-objcopy -O binary ./target/thumbv6m-none-eabi/release/flash1002 ../neotron-pico-bios/src/thumbv6m-none-eabi-flash1002-libneotron_os.bin
67-
```
109+
If you don't put the RP2040 into bootloader mode then when `probe-run` resets
110+
the chip after programming, the firmware will detect it has had an incomplete
111+
reset and cause a full reset. This makes the video output more reliable, but
112+
the full reset will immediately disconnect `probe-run` so you won't see any
113+
log messages. Booting the RP2040 in USB bootloader mode avoids this issue by
114+
making the `probe-run` triggered reset look more like a full reset.
68115

69-
6. Build and load the Neotron BIOS, and view the debug output stream, with `cargo run --release`:
116+
7. Build and load the Neotron BIOS, and view the debug output stream, with `cargo run --release`.
70117

71-
```console
72-
user@host ~/neotron-pico-bios $ DEFMT_LOG=debug cargo run --release
73-
Compiling neotron-pico-bios v0.1.0 (/home/jonathan/Documents/neotron/neotron-pico-bios)
74-
Finished release [optimized + debuginfo] target(s) in 0.76s
75-
Running `probe-run-rp --chip RP2040 target/thumbv6m-none-eabi/release/neotron-pico-bios`
76-
(HOST) INFO flashing program (7.30 KiB)
77-
(HOST) INFO success!
78-
────────────────────────────────────────────────────────────────────────────────
79-
INFO Neotron BIOS starting...
80-
└─ neotron_pico_bios::__cortex_m_rt_main @ src/main.rs:79
81-
INFO Clocks OK
82-
└─ neotron_pico_bios::__cortex_m_rt_main @ src/main.rs:102
83-
INFO Pins OK
84-
└─ neotron_pico_bios::__cortex_m_rt_main @ src/main.rs:121
85-
DEBUG Loop...
86-
└─ neotron_pico_bios::__cortex_m_rt_main @ src/main.rs:128
87-
```
88-
89-
You should see your Neotron Pico boot, both over RTT in the `probe-run` output, and also on the VGA output.
90-
91-
6a. Multiple probes
92-
93-
If you have multiple probe-rs compatible probes attached to your computer,
118+
```console
119+
user@host ~/neotron-pico-bios $ DEFMT_LOG=debug cargo run --release
120+
Compiling neotron-pico-bios v0.1.0 (/home/jonathan/Documents/neotron/neotron-pico-bios)
121+
Finished release [optimized + debuginfo] target(s) in 0.76s
122+
Running `probe-run-rp --chip RP2040 target/thumbv6m-none-eabi/release/neotron-pico-bios`
123+
(HOST) INFO flashing program (7.30 KiB)
124+
(HOST) INFO success!
125+
────────────────────────────────────────────────────────────────────────────────
126+
INFO Neotron BIOS starting...
127+
└─ neotron_pico_bios::__cortex_m_rt_main @ src/main.rs:79
128+
INFO Clocks OK
129+
└─ neotron_pico_bios::__cortex_m_rt_main @ src/main.rs:102
130+
INFO Pins OK
131+
└─ neotron_pico_bios::__cortex_m_rt_main @ src/main.rs:121
132+
DEBUG Loop...
133+
└─ neotron_pico_bios::__cortex_m_rt_main @ src/main.rs:128
134+
```
135+
136+
You should see your Neotron Pico boot, both over RTT in the `probe-run` output, and also on the VGA output.
137+
138+
## Multiple Probes
139+
140+
If you have multiple `probe-rs` compatible probes attached to your computer,
94141
you will receive an error message.
95142

96-
You can set the PROBE_RUN_PROBE environment variable to select one of the
143+
You can set the PROBE_RUN_PROBE environment variable to select one of the
97144
available probes, like so:
98145

99146
```console
@@ -104,10 +151,10 @@ the following probes were found:
104151
user@host ~/neotron-pico-bios $ PROBE_RUN_PROBE='0483:3748' DEFMT_LOG=debug cargo run --release
105152
```
106153

107-
You can also just provide the probe Serial, for example if you have multiple
154+
You can also just provide the probe Serial number, for example if you have multiple
108155
identical probes.
109156

110-
The documentation for this feature can be found at
157+
The documentation for this feature can be found at
111158
<https://github.com/knurling-rs/probe-run#12-multiple-probes>
112159

113160
## Changelog
@@ -116,27 +163,29 @@ See [CHANGELOG.md](./CHANGELOG.md)
116163

117164
## Licence
118165

119-
Neotron-Pico-BIOS Copyright (c) Jonathan 'theJPster' Pallant and the Neotron Developers, 2023
166+
```text
167+
Neotron-Pico-BIOS Copyright (c) Jonathan 'theJPster' Pallant and the Neotron Developers, 2023
120168
121-
This program is free software: you can redistribute it and/or modify
122-
it under the terms of the GNU General Public License as published by
123-
the Free Software Foundation, either version 3 of the License, or
124-
(at your option) any later version.
169+
This program is free software: you can redistribute it and/or modify
170+
it under the terms of the GNU General Public License as published by
171+
the Free Software Foundation, either version 3 of the License, or
172+
(at your option) any later version.
125173
126-
This program is distributed in the hope that it will be useful,
127-
but WITHOUT ANY WARRANTY; without even the implied warranty of
128-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
129-
GNU General Public License for more details.
174+
This program is distributed in the hope that it will be useful,
175+
but WITHOUT ANY WARRANTY; without even the implied warranty of
176+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
177+
GNU General Public License for more details.
130178
131-
You should have received a copy of the GNU General Public License
132-
along with this program. If not, see <https://www.gnu.org/licenses/>.
179+
You should have received a copy of the GNU General Public License
180+
along with this program. If not, see <https://www.gnu.org/licenses/>.
181+
```
133182

134183
See the full text in [LICENSE.txt](./LICENSE.txt). Broadly, we (the developers)
135184
interpret this to mean (and note that we are not lawyers and this is not
136185
legal advice) that if you give someone a Neotron Pico, you must also give them
137186
one of:
138187

139-
* Complete and corresponding source code (e.g. as a link to your own on-line
188+
* Complete and corresponding source code (e.g. as a link to your **own** on-line
140189
Git repo) for any GPL components (e.g. the BIOS and the OS), as supplied on
141190
the Neotron Pico.
142191
* A written offer to provide complete and corresponding source code on
@@ -147,8 +196,8 @@ the board for commercial gain), and you are using an unmodified upstream
147196
version of the source code, then the third option is to give them:
148197

149198
* A link to the tag/commit-hash on the relevant official Neotron Github
150-
repositories - https://github.com/Neotron-Compute/Neotron-Pico-BIOS and
151-
https://github.com/Neotron-Compute/Neotron-OS.
199+
repositories - <https://github.com/Neotron-Compute/Neotron-Pico-BIOS> and
200+
<https://github.com/Neotron-Compute/Neotron-OS>.
152201

153202
This is to ensure everyone always has the freedom to access the source code in
154203
their Neotron Pico.
@@ -158,4 +207,3 @@ their Neotron Pico.
158207
Unless you explicitly state otherwise, any contribution intentionally
159208
submitted for inclusion in the work by you shall be licensed as above,
160209
without any additional terms or conditions.
161-

0 commit comments

Comments
 (0)