Documentation for “Zerocat Chipflasher”
Generated on: Sat, 07 Dec 2024 11:41:33 +0100
Repository: git://zerocat.org/zerocat/projects/chipflasher.git
Board: board-v2.0.0-1495-05a6c4fe7
Version: v2.0.5-18-05a6c4fe7
Branch: master
Chipflasher v2, successor of Chipflasher ‘board-edition-1’
Copyright (C) 2015, 2016 kai kmx@posteo.net
Copyright (C) 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 Kai Mertens kmx@posteo.net
Copyright (C) 2017 tomás zerolo tomas@tuxteam.de
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
The initial project was started by Kai Mertens in 2015, as a private
project.
It was renamed and continued in 2016, but still kept private.
Authors of the initial code and documentation are:
The project was split and again renamed to the current version in 2016, and turned public. See tag repo-root-info for details.
Authors of Zerocat Chipflasher are now listed according to git log
output.
See copyright notices on the title page.
The goal of Zerocat Chipflasher is to provide an electronic device for the purpose of firmware replacement, fully hackable and of a free design, even down to chip level.
When it comes to flash a Coreboot or Libreboot compatible machine, the Zerocat Chipflasher is the right tool to use:
... and it uses the Parallax P8X32A free-design microcontroller!
It is assumed that you are running a GNU/Linux-libre operating system. We recommend to run GNU Guix System – alternatively, install the GNU Guix package manager.
Your computer has an RS232 port available and your user account is priviledged to access the port, e.g: It is member of the dialout group.
Furthermore, your system should have one or two USB ports available in order to power the flasher device. Otherwise, you will have to use an external power adapter, providing 5 to 6VDC at 1 Ampère.
Use Git to clone the project’s sources:
$ git clone git://zerocat.org/zerocat/projects/chipflasher.git
Change into the project’s documentation folder:
$ cd chipflasher/doc/
Study this README.md
to get started:
$ cat ../doc/README.md
All paths within the documentation are relative to the location of the
documentation source files, which are located in this project’s doc/
folder.
Versions are tagged according to the following pattern:
v<major>.<minor>.<revision>
<major>
– The resulting product is a major change or upgrade.<minor>
– Additional functionality or new features are introduced.<revision>
– Bug fixes, minor changes, graphical stuff.A tag should be annotated with related change log entries.
The first tag should be: v0.0.0
To checkout a version tag, run:
git checkout vx.x.x
However, this should be optional.
Using the tip of branch master should be just fine.
Use GNU Make to create dedicated profiles, and up-to-date profile generations. This allows you to match your environments to the ones used by Zerocat, thus yielding for bit-identical results:
$ make -C ../hardware/guix pull
$ make -C ../guix pull
To remove this project’s handy guix profiles, type:
$ make -C ../hardware/guix clean
$ make -C ../guix clean
This will remove symlinks only. If you want to remove the profiles from your system, run the GNU Guix Garbage Collector.
To list all available targets, type:
$ make -C ../hardware/guix help
$ make -C ../guix help
To generate hardware design files for the documentation, type:
$ echo "make -C ../../hardware" | make -C ../hardware/guix environment
To remove them, type:
$ echo "make -C ../../hardware clean" | make -C ../hardware/guix environment
To build the documentation, type:
$ echo "make -C ../doc" | make -C ../guix environment
To clean up, type:
$ echo "make -C ../doc clean" | make -C ../guix environment
To build the documentation in one go, type:
$ make -C ../guix go
To clean up, type:
$ make -C ../guix clean-go
You can type as an alternative:
$ echo "make -C ../../hardware" | make -C ../hardware/guix environment\
&& echo "make -C ../doc" | make -C ../guix environment
To clean up as an alternative, type:
$ echo "make -C ../../hardware clean" | make -C ../hardware/guix environment\
&& echo "make -C ../doc clean" | make -C ../guix environment
Checkout the profile generation, instantiate channels, create a pure shell that provides nothing but prerequisites:
$ make -C ../guix environment
To confirm that your project environment is properly set up, run:
[env]$ make -C ../guix usage
Invocations of make
to generate the documentation, compile the
sources, etc., should be done from this project environment, only.
To restore the initial environment, later on, when you are done with this project, type:
[env]$ exit
Chip documentation can be downloaded automatically. See
../doc/Makefile for targets chip-documentation
and
clean-chip-documentation
, e.g.:
$ echo "make -C ../doc chip-documentation" | make -C ../guix environment
You can still build the original documentation and software of the former, RYF-certified Chipflasher ‘board-edition-1’ device. Proceed like this:
Checkout tip of branch master:
$ git checkout master
Set up old GNU Guix environment:
$ make -C ../guix pull0
$ make -C ../guix environment0
Download Parallax’ libraries before checkout:
[env]$ make -C ../firmware1/src setup-lib-parallaxinc
Checkout at tag board-edition-1:
[env]$ git checkout board-edition-1
Modify macros to match the environment:
[env]$ sed -i -r\
-e'/^SHELL/cSHELL := /bin/sh'\
-e'/^PATH_GNUGUIX/cPATH_GNUGUIX = \$(shell echo \"\$\$GUIX_ENVIRONMENT\"/;)'\
-e'/^PATH_SIMPLELIBS_MASTER/{; s,.\(PATH_PARALLAX\),../../firmware1/src/parallaxinc/,; s,-master,,; };'\
../firmware/src/{Makefile,Startfile.mk}
Generate the documentation:
[env]$ touch ../doc/doxygen-resources/{header,footer}.html
[env]$ make -C ../doc
Build firmware and utility:
[env]$ make -C ../firmware/src
Operate Chipflasher ‘board-edition-1’, i.e.:
[env]$ make -C ../firmware/src -f Startfile.mk
...
...
Clean up, return back to tip of branch master, leave environment:
[env]$ make -C ../firmware/src cleanall
[env]$ make -C ../doc clean
[env]$ git stash push
[env]$ git stash clear
[env]$ git checkout master
[env]$ exit
Documentation source files are written in markdown syntax. They should carry their individual copyright and license notices right below the title giving headline, e.g.:
<Title-of-Document>
===================
Copyright (C) <Year> <Name-of-Author> <Email-Address>
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
Texts. A copy of the license is included in the section entitled
"GNU Free Documentation License".
<Other-Headline>
----------------
...content...
The generated documentation carries a license notice right at top on
its title page, with copyright statements generated from git log
output.
Sections of the generated documentation are build from selected markdown source files, with their individual copyright and license notice stripped.
In order to enrich the generated documentation ...
*.md
markdown source files to ../doc/
.... and adapt ../doc/Makefile to produce nice output.
In case more tools are needed, don't forget to update ../guix/manifest0.scm.
To make your image look nice within the documentation, select a landscape layout of 16:9 aspect ratio.
Use ImageMagick to prepare your image, e.g.:
If your image is big, reduce it to a maximal width of 2000 pixel:
mogrify -resize 2000x <image>
Please clean image files from metadata, before committing, i.e.:
mogrify -strip <image>
If you embed your image into a markdown documentation file, use this syntax:
![<path/to/image>][]
[<path/to/image>]: <path/to/image> "title message"
or alternatly:
![<path/to/image>][my-image-shortcut]
[my-image-shortcut]: <path/to/image> "title message"
These patterns will guarantee that <img>
tags will have their src
,
alt
and title
attributes properly set within the html output.
Please use this license header for code source files:
Zerocat Chipflasher --- Flash free firmware, kick the Management Engine.
Copyright (C) <Year> <Name-of-Author> <Email-Address>
This file is part of Zerocat Chipflasher.
Zerocat Chipflasher is free software: you can redistribute it
and/or modify it under the terms of the GNU General Public
License as published by the Free Software Foundation, either
version 3 of the License, or (at your option) any later
version.
Zerocat Chipflasher is distributed in the hope that it will be
useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Zerocat Chipflasher.
If not, see <http://www.gnu.org/licenses/>.
If you intend to write shell scripts, use this skeleton to make them work for GNU Guix:
#!/bin/sh
# Re-exec if we are not using Bash or are using Bash in POSIX mode.
if [ -z "$BASH" ] || [ "$BASH" = "/bin/sh" ]; then
bash=`command -v bash`
if [ -z "$bash" ]; then
echo "Couldn't find Bash, sorry!"
exit 1
else
exec "$bash" "$0" "$@"
fi
fi
# We're using Bash now.
set -o errexit
set -o nounset
set -o pipefail
# Your code goes here ...
Update ../doc/CHANGES.md and list your contributions.
You can use git shortlog
to get a starting point for your edit.
Zerocat Chipflasher ships copyrighted work.
See #../doc/AUTHORS.md for a list of people that have contributed.
Zerocat Chipflasher is free software. It makes use of free software licenses as recognized by Free Software Foundation (FSF), and should be freely distributable:
Files located in folder hardware/
, if available, describe hardware
of a free design, licensed under:
Authorship, copyright and license information may be provided in more detail on a per-folder and/or per-file basis. Check the sources.
Please report a bug if you find the distribution hindered.
See Zerocat Website for contact information.
Since project version v2.0.0, changes are tracked within this file,
#../doc/CHANGES.md.
For changes, introduced by version v2.0.0 and lower, see
#../doc/version-history.md.
Changes introduced to hardware design files are tracked in file
../hardware/CHANGES.md.
For changes, introduced by version board-v2.0.0 and lower, see
#../doc/board-version-history.md.
NOTICE: Anyone modifying the project should provide brief information about the modifications, including the date they were made. Information should be added but never removed from this file. Licensees should provide a brief entry with a date and the nature of the modification for each change. Please use markdown syntax!
2024/05/06: Project version v2.0.5 released!
Default environment goals renamed to:
pull, shell, environment
File ../host/start/Workflow.mk
fixed, utility check added.
File ../guix/Makefile
updated with new goals:
go, clean-go
File ../firmware2/src/Makefile
updated with new goal:
show-config
Extensive compiler configuration warnings removed.
File ../doc/Makefile
updated with new goals:
chip-documentation, clean-chip-documentation
Guix channel updated to: d35bc00cc1
(Propeller 1 toolchain)
2023/07/15: Project version v2.0.4 released!
Documentation layout refined for centered pages, wide viewports.
2023/04/13: Project version v2.0.3 released!
This version ships a new set of GNU Guix channel and manifest
files. The guix channel has been upgraded to 6992e66b21
, but old
channel b603554ed0
can still be used to checkout at tag
board-edition-1, while using the generated GNU Guix environment.
Old firmware kick
has been refined for reliable register
verification, it covers less bytes by the way.
The HTML documentation has been rearranged. It supports inter-documentational shortcuts while preserving the readability of its source files.
Device names are used with less quotation marks.
2023/03/15: Project version v2.0.2 released!
This version ships improved make files according to:
Zerocat Project Template v0.0.23
The project’s environment setup is now made easy.
Code snippets, suitable to build the documentation in one go, are available via README file.
The generated HTML documentation is refined and enriches the main documentation by subordinate documentations for firmware and kit.
The navigation should be easier to understand. Distracting buttons have been dropped, obsolete files have been removed.
Information about the project’s shell environment is provided in detail by a dedicated button, called “GNU Guix Environment”.
2023/02/15: Project version v2.0.1 released!
The default goal in file ../host/start/Makefile
is fixed as part
of an over-all goal and recipe review. So called ‘ready-made’ targets
are now available for all combinations of firmware, board version,
utility, RS232 baudrate and upload destination (e.g. RAM or EEPROM).
The main documentation ships a related quick start section, which should get you started along firmware configuration tables.
Some documents are updated with adapted invocation snippets of
make
or have been cleaned to provide less content but improved
focus.
The device name, reported to flashrom
, changes from
‘Zerocat! -v2-’ to ‘Chipflasher v2’ and from
‘Zerocat! -v1-’ to ‘Chipflasher v1’.
Quotation in file ../doc/THANKS.md
is refined and ships URL
shortcuts.
Kit User Guide, update URL to partner store’s kit sales page.
2023/02/03: Project version v2.0.0 released!
Development of Zerocat’s “Chipflasher v2” has been made possible by financial means of the NGI0 PET Fund, a fund dedicated to Privacy and Trust Enhancing technologies, financially supported by the European Commission’s Next Generation Internet programme. Furthermore, I received great support from Michiel Leenaars and the NLnet Foundation, as well as from OSE-Germany e.V. and associated fellows.
Dear guys, I am very grateful to have met your friendly companionship and encouragement, thank you! --- Kai Mertens
Have fun with these sources!
Everyone should flash a free BIOS at least once in his lifetime ;-)
It is an exciting experience.
If you are in a hurry to apply Coreboot or Libreboot on your
machine, check #../doc/targets.md to see if it is supported
by kick
, the first firmware. In addition, give kick2
and flashrom
a try, as flashrom
has a huge database of chips.
To generate free firmware ROMs suitable for flashing, you might as well consider to use Zerocat Coreboot Machines.
NOTE: Changes related to hardware and software are tracked in separate files:
NOTE: Care has been taken to keep the software compatible with the RYF-certified Chipflasher ‘board-edition-1’ (PCB: board-v1.1.0), so please feel free to upgrade its firmware.
The circuit board is the essential part of the flasher device.
This documentation should help you to build your own PCB or breadboard
circuit. Sources and CERN-OHL-S v2 license files are located in folder
../hardware/
.
See #../doc/chipflasher.md to get started.
See #../kit-user-guide/doc/kit-user-guide.md to get help for the
assembly process.
connect
Utility connect
is part of this project,
for the board’s firmware needs someone to talk to.
The capabilities of a terminal, set up by propeller-load
, are not
sufficient. Therefore, sample code had been used to start building
up connect
. Now it is a small program that suits our needs, its
code is located in folder ../host/src/
.
The utility is documented as part of this main documentation.
kick
The first firmware of the flasher board is called kick
; its
source files are located in folder ../firmware1/src/
. This firmware
is able to communicate with connect
.
See #../firmware1/doc/README.md for its documentation.
kick2
The second firmware of the flasher board is called kick2
; its
source files are located in folder ../firmware2/src/
. This firmware
is able to communicate with connect
and flashrom
.
See #../firmware2/doc/README.md for its documentation.
kick
or kick2
Related sections and files are:
Get started, quickly.
#../firmware1/doc/how-to-use-board-edition-1.md
How to set up and operate Chipflasher ‘board-edition-1’
with connect
and kick
. This document is written for old flasher
board v1, but should still be useful.
../hardware/gschem/chipflasher-page13.sch.png
See how to attach an SPI chip. Don’t mix power and ground pins!
Operate the flasher with kick
or kick2
.
Learn how data is transmitted with connect
.
Process connect
’s incoming/outgoing ROM data.
Chipflasher “v2” and Accessories
Hardware Design Sources are licensed under CERN Open Hardware Licence Version 2 – Strongly Reciprocal, or any later version.
See CERN-OHL-S v2 User Guide to get guidelines on how to use these hardware designs for your own projects.
The Zerocat Chipflasher aims to be free-design as much as possible, that’s why it relies on the Parallax Propeller 1 microcontroller. In 2014, the chip design files of this controller have been released under GPLv3, by Parallax.
The PCB board-v2.0.0 as of commit fa7ba6995
has been tested successfully.
PCBs of other commits are UNTESTED!
See #../doc/board-version-history.md and ../hardware/CHANGES.md to track changes
Device Label
PCB (top view)
PCB (bottom view)
PCB “board-v2.0.0”, top view
CONN1: Power Jack for DC power input (5..6VDC @ 1A)
CONN2: Power Switch Connector
J1: SPI
J2: RS232 pinheader for data I/O
J3: Configuration Jumper for RST reset pin
U8: DIP Switch Block for easy firmware configuration
D1..D3: Program Status LEDs
D4: SPI Status LED
D5: SPI Power LED
Front Plate, Parametric 2D Vector Graphic, created with LibreCAD
Device Label, Scalable Vector Graphic, created with Inkscape
PCB layout file, created with PCB
Circuit Schematics, created with gEDA/gschem
PCB
../hardware/gschem/chipflasher-page01.sch
../hardware/gschem/chipflasher-page02.sch
../hardware/gschem/chipflasher-page03.sch
../hardware/gschem/chipflasher-page04.sch
../hardware/gschem/chipflasher-page05.sch
../hardware/gschem/chipflasher-page06.sch
../hardware/gschem/chipflasher-page07.sch
../hardware/gschem/chipflasher-page08.sch
Power Switch, Cables and Chip Pinouts
../hardware/gschem/chipflasher-page09.sch
../hardware/gschem/chipflasher-page10.sch
../hardware/gschem/chipflasher-page11.sch
../hardware/gschem/chipflasher-page12.sch
../hardware/gschem/chipflasher-page13.sch
Device Label
Acrylic Glass Front Plate (4mm, 100×80mm)
Hexagon Distances, Discs and Screws
PCB 100×80mm with Components
../hardware/gschem/chipflasher-page01.bom.html
../hardware/gschem/chipflasher-page02.bom.html
../hardware/gschem/chipflasher-page03.bom.html
../hardware/gschem/chipflasher-page04.bom.html
../hardware/gschem/chipflasher-page05.bom.html
../hardware/gschem/chipflasher-page06.bom.html
../hardware/gschem/chipflasher-page07.bom.html
../hardware/gschem/chipflasher-page08.bom.html
Power Switch, Cables and Chip Pinouts
../hardware/gschem/chipflasher-page09.bom.html
../hardware/gschem/chipflasher-page10.bom.html
../hardware/gschem/chipflasher-page11.bom.html
../hardware/gschem/chipflasher-page12.bom.html
../hardware/gschem/chipflasher-page13.bom.html
Test Clip SOIC8
Test Clip SOIC16
Test Socket DIL8
Chipflasher “v2”, first series
In October 2022, a set of first five devices is assembled:
PDFs, generated from source files via ../hardware/Makefile:
../hardware/artwork/board-label.svg.pdf
../hardware/gschem/chipflasher.sch.pdf
../hardware/gschem/cables.sch.pdf
Board Circuit Schematic, Page 1(13): Controller with RAM, of a free Design
Board Circuit Schematic, Page 2(13): Power Input
Board Circuit Schematic, Page 3(13): Voltage Regulators
Board Circuit Schematic, Page 4(13): SPI
Board Circuit Schematic, Page 5(13): Program Status LEDs
Board Circuit Schematic, Page 6(13): RS232 Pinheader
Board Circuit Schematic, Page 7(13): Serial EEPROM (optional)
Board Circuit Schematic, Page 8(13): Vcc_SPI Voltage Monitor
Board Circuit Schematic, Page 9(13): Power Switch
Board Circuit Schematic, Page 10(13): Y-USB Power Cable
Board Circuit Schematic, Page 11(13): RS232 Cable
Board Circuit Schematic, Page 12(13): SPI Cable
Board Circuit Schematic, Page 13(13): SPI Flash Pinouts
+----------------+
+--------------+ | '''''' <-DIPSW | +·············+
| Host, i.e. | | 654321 | : :
| X60/T400 |===++==+5VDC==>| | +---------+ :
| + Docking | // | Chipflasher v2 |==+3.3VDC==>| SPI | :
| |=++ | |<---SPI-/6->| Chip | :
| Utility: | | LED D4: o | +---------+ :
| `connect' or |<--RS232-/5--->| | : Systemboard :
| `flashrom' | | Firmware: | : without :
+--------------+ | `kick2' | : Battery :
| | : nor Power :
| LED D5: o | : :
+----------------+ +·············+
+----------------------------+
| External Power Device |
| 5-6VDC @ 1000mA |
| 5.5/2.1mm barrel jack plug |
+----------------------------+
||
|| +----------------+
+--------------+ || | '''''' <-DIPSW | +·············+
| Host, i.e. | || | 654321 | : :
| X60/T400 | \\==+5VDC==>| | +---------+ :
| + Docking | | Chipflasher v2 |==+3.3VDC==>| SPI | :
| | | |<---SPI-/6->| Chip | :
| Utility: | | LED D4: o | +---------+ :
| `connect' or |<--RS232-/5--->| | : Systemboard :
| `flashrom' | | Firmware: | : without :
+--------------+ | `kick2' | : Battery :
| | : nor Power :
| LED D5: o | : :
+----------------+ +·············+
kick2/flashrom
Configuration TableOn ‘board v2’, the onboard DIP switch block is honoured by kick2/flashrom
upon start, only.
On ‘board v1’, parameters default to preset values.
In any case, file ../firmware2/src/Makefile
can be used to customize configurations.
| `kick2/flashrom` | `kick2/flashrom` on ‘board v2’
| ‘board v1’ |
|--------------------|-------------------------------------------------------------------
Function | defaults | DIP Switch Nº | o = open, x = closed
----------------------------|--------------------|-------------------|-----------------------------------------------
SPI Clock Driver Strength | 50% | DIP Switch 1..2 | oo = 25%, xo = 50%, ox = 75%, xx = 100%
SPI Mode 0 or 3 | Mode 3 | DIP Switch 3 | o = Mode 3, x = Mode 0
RS232 Baudrate | 115200 | DIP Switch 4 | o = 115200, x = 57600, per Makefile = 38400
SPI Power Suspend | allow | DIP Switch 5 | o = allow, x = inhibit
SPI Power-up Pulse Type | repetitive | DIP Switch 6 | o = one shot, x = repetitive
kick2/connect
Configuration TableFirmware kick2
, interfacing connect
, uses a fixed configuration.
However, RS232 baudrate setting can still be configured per Makefile.
| `kick2/connect`
|-----------------------
Function | fixed configuration
----------------------------|-----------------------
SPI Clock Driver Strength | 100%
SPI Mode 0 or 3 | Mode 3
RS232 Baudrate | 115200
SPI Power Suspend | allow
SPI Power-up Pulse Type | repetitive
kick/connect
Configuration TableFirmware kick
, interfacing connect
, uses a fixed configuration.
However, RS232 baudrate setting can still be configured per Makefile.
| `kick/connect`
|-----------------------
Function | fixed configuration
----------------------------|-----------------------
SPI Clock Driver Strength | 100%
SPI Mode 0 or 3 | Mode 3
RS232 Baudrate | 115200
SPI Power Suspend | allow
SPI Power-up Pulse Type | one shot
To get you started, quickly:
You are dealing with electrostatical sensitive devices, observe precautions!
Hook up all cables to your device.
Connect device to host’s RS232 port.
Switch device on.
Make sure LED D4 (SPI Status) is off, then attach SPI cable to target board or chip, if any. Your target must not be powered by battery or AC adapter. Unplug small coin battery, if any.
To start quickly:
To start, using connect
, type:
[env]$ make -C ../host/start default
The flasher’s menu should appear on screen.
Use a second terminal to set up guix environment as before, then type:
[env]$ make -C ../host/start -f Workflow.mk help
To get typical workflow information for a single chip read procedure, type:
[env]$ make -C ../host/start -f Workflow.mk workflow-chip-read
To start, using flashrom
, type:
[env]$ make -C ../host/start kick2-flashrom-115200-ram
[env]$ make -C ../host/start flashrom-115200
This performs a probe with flashrom
, same as with:
[env]$ flashrom -p serprog:dev=../host/start/tty_port_pointer:115200,spispeed=40M -V
Adapt command line options for read, erase, write and verify
operations according to your needs. Please note that flashrom
resets SPI configuration registers without asking for user’s
consent!
Now process your data...
Get folders and configuration cleaned:
[env]$ make -C ../host/start clean
To see more options, type:
[env]$ make -C ../host/start help
When done with your target, make sure LED D4 (SPI Status) is off, then detach SPI test clip.
When done with the device, switch it off.
This is a short list of software tools which are required...
If GNU Guix is available or if you are on GNU Guix System, type
$ guix environment --pure -m guix/manifest.scm
to create a shell environment with all prerequisites set up. In case anything fails, the manifest file provides guix channel information to ease replication of guix itself.
Note this project is developed on GNU Guix System, thus the most recent state of art might fail on Trisquel due to unsupported tool versions, e.g.:
The gEDA-project is not available on Trisquel 10.0.1
Parallax’ SimpleIDE binary packages are too old for Trisquel 10.0.1
Please consider to install the GNU Guix Package Manager on top of Trisquel.
GNU/Linux-libre Operating System like Trisquel or GNU Guix System, with access to an RS232 serial port
Command-line Interpreter (Shell)
Dash, POSIX-compliant /bin/sh
implementation that aims to
be as small as possible
GNU Bash, command-line interpreter of the GNU system; it
allows most sh
scripts to be run without modification
The project’s Makefiles set their SHELL
Variable to /bin/sh
.
On Trisquel, /bin/sh
points to /bin/dash
(Debian Almquist Shell) by default,
whereas it points to GNU Bash on GNU Guix System.
The echo
built-in of those shells differ, therefore the Makefiles
make use of GNU Coreutils’ echo
binary.
GNU Coreutils, basic command-line tools that are expected in a POSIX system, excluding shell
GNU Diffutils, comparing and merging files
Glibc, the GNU C Library
GCC-Toolchain, the GNU Compiler Collection and its tool chain for C/C++ development
GNU Make, remake files automatically
GNU Sed, non-interactive stream text editor
Git, free distributed version control system
The gEDA/gaf subset of tools from the gEDA-project, a full GPL'd suite and toolkit of Electronic Design Automation tools
PCB, interactive tool for editing printed circuit board layouts
Gerbv, viewer for files in Gerber format (RS-274X) and Excellon drill files
Inkscape, vector graphics editor, version “1.1 (c68e22c387, 2021-05-23)”
ImageMagick, create, edit, compose, or convert bitmap images
SRecord Program Collection, ROM image manipulation software
Your favorite text viewer or editor, i.e.:
Your favorite web browser, i.e.:
Your favorite PDF viewer, i.e.:
Computer-aided design (CAD) application, i.e.:
Free Firmware Projects
Parallax provides a bunch of tools, i.e.:
PropGCC, the port of GCC (the GNU Compiler Collection) to the Parallax Propeller
OpenSpin, Spin/PASM compiler for the Parallax Propeller
PropLoader, a loader for the Parallax Propeller
SimpleIDE, a simple desktop environment (not essential, we recommend to use your favorite text editor)
"Simple Libraries", the Parallax Learn Simple Libraries subfolder workspace
The “Simple Libraries” folder is required.
File ../firmware/src/Makefile offers a target to clone the Parallax
Simple-Libraries repository, checked out at commit
c4f9a3e273002ec5e6f8b1d1ab95c14cb1823e82
:
$ make setup-lib-parallax
The library folder will then be available as:
../firmware/src/parallaxinc/Simple-Libraries/Learn/Simple Libraries/
Subfolders are passed as arguments to propeller-elf-gcc
.
More recent versions of this folder lead to bigger binaries and are not yet usable for the chipflasher firmware.
GNU Guix provides a very comfortable way to...
install the complete Propeller development suite from source
$ guix package --no-substitutes --install propeller-development-suite
use precompiled binaries, which is faster, like so:
$ guix package --fallback --install propeller-development-suite
If GNU Guix reports unset environment variables, you may set them automatically:
$ guix environment --ad-hoc propeller-development-suite
Please install the GNU Guix package manager on top of your system, if not already. The GNU Guix project recommends installation using the latest release binary, which can be downloaded here: http://www.gnu.org/software/guix/download/. The instructions are linked there too. Alternatly, run GNU Guix System.
With this binary package, all tools are bundled together.
The latest packaged release for GNU/Linux is 1.0 RC1
from 11-24-2014.
Until more recent source repositories of these tools will work, Parallax suggests to install this old binary package “SimpleIDE 1.0 RC1” as a fallback.
This package is too old for Trisquel 10.0.1, dependencies cannot be resolved :-/
Please visit page SimpleIDE Software for Linux, which provides binary packages for both, 32 and 64 bit architectures.
For your convenience, we provide a shortcut to the ZIP file here:
$ wget https://www.parallax.com/package/simpleide-software-for-linux-propeller-c/?wpdmdl=3349 \
-O SimpleIDE-Software-for-Linux-Propeller-C-3349.zip
$ unzip SimpleIDE-Software-for-Linux-Propeller-C-3349.zip
For your convenience, we provide our backup of former installation instructions, that are known to work.
Linux Directions, as adapted from Parallax
Supports Debian, Mint, and Ubuntu Linux (Intel 32/64bit)
Please note the dollar sign ($) represents the command prompt in
the steps below. If you see $ command
, it means enter command
in your command terminal window. Installation requires using the
Linux Terminal. The steps below assume you’re logged in with a
user account (non-root access) but do know the root password.
NOTE: In Trisquel7, use $ sudo -s
to become root.
To Install:
Download appropriate .deb package (i386 for 32bit systems or i686/amd64 for 64bit systems)
Open a terminal and CD to the download folder
Enter $ sudo dpkg -i simple-ide_1-0-1-rc1_amd64.deb
(adjust the filename to match what was downloaded)
a. You may get errors due to dependencies, the next step will take care of that.
Enter $ sudo apt-get install -f
Answer yes Y
as required to install dependencies
If your user account is not part of the dialout
group, you
must add it or propeller-load
won’t be able to download to
the Propeller
a. Enter $ sudo adduser ${USER} dialout
b. Log out from the system completely, then log back in for permissions to take effect
To remove the package, use $ sudo apt-get remove simpleide
Original repositories of the first bundle release (SimpleIDE 1.0 RC1):
SimpleIDE, the Desktop Environment:
Simple-Libraries, contents of the SimpleIDE workspace folder and
its Parallax Learn/Simple Libraries
subfolder:
PropGCC, the port of GCC (the GNU Compiler Collection) to the Parallax Propeller:
https://github.com/parallaxinc/propgcc/
As stated by Jeff Martin from Parallax, the content at the tip of the release_1_0 branch should match the proper sources:
OpenSpin, open source compiler for the Spin/PASM language of the Parallax Propeller:
PropLoader, a loader for the Parallax Propeller:
These are newer repositories from David Betz.
propeller-gcc compiler:
https://github.com/dbetz/propeller-gcc
Switching over to these sources was not yet successful.
propeller-load:
Until these repositories will work, Parallax suggests to install the old binary package “SimpleIDE 1.0 RC1” as a fallback.
It makes a difference whether you attach a discrete SPI flash chip to the chipflasher or whether you connect a chip-in-situ, which is soldered onto a system board. In the latter case, you will have to test a real life condition - just developing according to chip’s datasheet is not sufficient. Please compare to: ../doc/power-profiles.md
This file lists chips and system boards that have been successfully tested.
TODO: For some chips, the block protection mechanism is not fully supported.
TODO: We focus on Standard-SPI. Dual-SPI or Quad-SPI is not implemented.
Please compare to: ../firmware/src/libkick/chipspec.c
kick2
AT26DF321 (Atmel)
Chip erase may be broken according to datasheet. Use block batch erase instead.
MX25L3206E (Macronix)
AsRock E350M1 with socketed W25Q32FVDAIQ (Winbond)
We used the 8-pin DIL socket adaptor for flashing. Then the chip was inserted onto the sysboard.
Gigabyte GA-B75M-D3H Desktop Board with 2x MX25L6405D (Macronix)
Gigabyte GA-G41M-ES2L Desktop Board with MX25L8005 (Macronix)
Intel Desktop Board D945GCLF with W25X40 (Winbond)
NOTE: You may set bit SRP in the status register to enable WP# control.
ThinkPad T530 and W530 with MX25L6406E + MX25L3206E (Macronix)
Use Pomona SOIC8 Clip (Model 5250).
The upper chip#2 is hidden below the inner cage, you have to disassemble the motherboard completely.
Remove RAM modules and CPU.
The lower chip#1 seems to interact with the motherboard when being powered or accessed for erase/write for a while. It does not provide a proper feedback via WIP bit, thus the end-of-write-cycle has to be guessed:
Select “timeout” as WIP check method
ThinkPad T520i with W25Q64FV (Winbond)
Simply remove palm-rest and use Pomona SOIC8 Clip (Model 5250).
ThinkPad T500 with W25X64VSFIG (Winbond)
TODO: ThinkPad T500: Flashing works fine, however booting has not been tested yet.
ThinkPad T430s
Note a clip cannot be used, wires have to be soldered to chip’s pins.
ThinkPad T430
with MX25L6406E + MX25L3206E (Macronix)
Use Pomona SOIC8 Clip (Model 5250) or SOIC16 Clip (Model 5252), both work fine.
ThinkPad T420
with MX25L6406E (Macronix)
Use Pomona SOIC8 Clip (Model 5250) or SOIC16 Clip (Model 5252), both work fine.
ThinkPad T400
ThinkPad X1 Carbon Gen1
with EN25QH64 (EON) + MX25L3205D (Macronix)
Pomona SOIC8 Clip (Model 5250) required for upper 4MB chip. Lower 8MB chip can be flashed with Pomona SOIC8 Clip (Model 5250) or SOIC16 Clip (Model 5252), both work fine.
ThinkPad X230t (Tablet)
with MX25L6405D + MX25L3205D (Macronix)
Use Pomona SOIC8 Clip (Model 5250) or SOIC16 Clip (Model 5252), both work fine.
ThinkPad X230
with EN25QH64 (EON) + EN25QH32 (EON)
Use Pomona SOIC8 Clip (Model 5250) or SOIC16 Clip (Model 5252), both work fine.
ThinkPad X220 with W25Q64FV (Winbond)
Use Pomona SOIC8 Clip (Model 5250) or SOIC16 Clip (Model 5252), both work fine.
ThinkPad X220 with AT25DF641 (Atmel)
Use Pomona SOIC8 Clip (Model 5250) or SOIC16 Clip (Model 5252), both work fine.
Use kick2
, the second firmware approach.
This chip has volatile registers, Hardware Write Protection cannot be applied via jumper.
ThinkPad X201 with MX25L6445E (Macronix)
Use Pomona SOIC8 Clip (Model 5250) or SOIC16 Clip (Model 5252), both work fine.
ThinkPad X200s
TODO: ThinkPad X200s: We had successfully flashed one X200s some time ago, but don't remember the chip type. We believe that all types would work, but this has to be checked.
ThinkPad X200
ThinkPad X200 with AT26DF321 (Atmel)
Chip erase may be broken according to chip’s datasheet. Use block batch erase instead.
ThinkPad X200t (Tablet)
with W25X64VIG in WSON Package
Note a clip cannot be used, wires have to be soldered to chip’s pins.
ThinkPad T60 with MX25L1605D (Macronix) and ATI Graphics (Mobility Radeon X1300).
Use Pomona SOIC8 Clip (Model 5250) or SOIC16 Clip (Model 5252), both work fine.
The chipflasher’s power regulator for the SPI Bus will get hot. Please use the flasher in a cool environment or blow some air around it during the readout or flashing procedure. Additionally, remove systemboard’s CPU and RAM Modules from their sockets.
Firmware kick2
of v0.6.7 offers automated SPI Bus pausing to
releave power regulator U7, thus avoiding too low voltages
and overheating.
ThinkPad T60 with AT26DF161 (Atmel), Intel GPU only.
NOTE: Flashing works fine although chip’s supply voltage stays around 2.5V and thus doesn't reach proper specs.
Firmware kick2
of v0.6.9 supports volatile registers and offers
automated SPI Bus pausing to releave power regulator U7, thus
avoiding too low voltages and overheating.
ThinkPad T60 with SST25VF016B (SST), Intel GPU only.
NOTE: Flashing works fine although chip’s supply voltage stays around 2.5V and thus doesn't reach proper specs.
Firmware kick2
of v0.6.9 supports volatile registers, Auto
Address Increment Word Program, and offers automated SPI Bus
pausing to releave power regulator U7, thus avoiding too low
voltages and overheating.
ThinkPad X60/X60s (32bit/64bit)
Use Pomona SOIC8 Clip (Model 5250) or SOIC16 Clip (Model 5252), both work fine.
Firmware kick2
of v0.6.7 offers automated SPI Bus pausing to
releave power regulator U7, thus avoiding too low voltages
and overheating.
with SST25VF016B (SST)
Chip detection does not work reliably. Use a fast train of consecutive trials until chip is detected. This chip has volatile registers and is kept powered. The flasher’s voltage regulator U7 is getting hot, but should continue proper operation. However, it might be a good idea to give him some rest and withdraw SPI bus power between consecutive readouts. @bug Proper cooling required for regulator U7.
with MX25L1605D (Macronix)
These laptops are of special interest, because they have the same CPU-Chipset combination (Core Duo or Core2Duo and i945 Northbrigde) as the ThinkPad X60, which is known to lack the Manageability Engine completely. Unfortunately, these machines are not yet supported by coreboot.
Please compare to: https://www.coreboot.org/Laptop
ASUS S96F/Z96F (unknown flash chip)
Acer Aspire One ZG5 (Winbond 25x80AVSIG)
Winbond SPI Flash. Size is 8Mbit (1Mbyte), organized in 256 sectors à 4Kbyte, pages of 256 bytes. Status register protection bits are static, thus hardware write protection would work. Besides "Standard SPI", this chip features "Dual Output SPI".
Fujitsu S. Lifebook S7110 (Spansion S25FL008A)
Spansion SPI Flash. Size is 8Mbit (1MByte). Status register protection bits are static, thus hardwired write protection would work. Note that memory is organized in 16 sectors à 512Kbit. Pages have 256 bytes.
Getac P470 (unknown flash chip)
HP/Compaq nc6320 (M25PE80)
Micron SPI Flash. Size is 8Mbits, sectors à 4Kbyte, pages are 256 bytes. Features 16 bytes unique ID code(!). Hardware write protection should work. Features flexible software protection modes.
MSI Wind U100 (MX25L8005)
Macronix SPI Flash. Already supported, but not yet tested in situ. Size is 8Mbit (1Mbyte), 256 sectors à 32Kbit (4Kbyte). Status register protection bits are static, thus hardwired write protection would work.
Roda Rocky III+RK886EX (SST49LF080)
SST LPC (Low Pin Count) Flash, 32 pins. Size is 8Mbit. Pins WP# and TBL# provide hardware write protect for entire chip and/or top boot block. Features 5 GPI pins for system design flexibility.
Note the LPC Bus is not yet supported by the chipflasher.
The chipflasher’s pair of programs uses the files chip2file.txt
and
file2chip.txt
to store and read chip data. When invocing connect
,
you can pass alternative filenames, of course. Both files are processed
on a line by line basis. Each line is embedded into a pair of STX/ETX
characters which are stripped before the line data is stored on disk or
in the chip.
Reading chip data
In flash chips, data is stored byte by byte, in binary form. kick
casts that data into a format which is then received by connect
(the chipflasher’s host software) and stored on disk under the name
chip2file.txt
. Payloads of just 0xff
may be filtered in order
to accelerate data transfer. LF
is used as line ending. The
one-line file header and footer may contain valuable information as
well.
Writing data to chip
Transform your ROM file into a supported data format and save it as
file2chip.txt
. This file is used by connect
for feeding data to
kick
. All commonly used line endings are supported, i.e. LF
,
CR
and CR+LF
.
Verification
It is always a good idea to read a chip twice and diff
the
outputs, in order to verify that the received data is not
corrupted. Remember that chip2file.txt
will be overwritten
without notice, so back it up if you don't want to loose your data!
The chipflasher’s data formats intend to be compatible with
srecord
, the famous free software program collection by Peter Miller.
Some first sources of information are:
$ apropos srec_
$ man srec_examples
$ man srec_input
$ man srec_cat
$ man srec_motorola
$ man srec_binary
The srecord
program collection supports a variety of data formats
like binary, hexdump and the Motorola S-Record which is the default.
The chipflasher menu offers the following line formats, which are
accessible through “t: toggle format
”:
“S-Record”
Data is organized in lines of Motorola S-Record. The payload of each line is transmitted over the RS232 wire as binary data. This speeds up transmission. Each line contains a checksum which helps to check data integrity on the fly. This format is recommended.
“Hex-Dump”
Data is organized in lines of hexdata with an appended ASCII text
representation of bytes, human readable. Note the output of
srec_cat
is understood by kick
only if 0xff
s are not
stripped out.
# create a backup of first readout
$ cp chip2file.txt backup.txt
# diff with second readout
$ diff backup.txt chip2file.txt
This is useful if you need to extract binary blobs in order to create
a new boot.rom
with coreboot.
# Convert a Motorola S-Record into a complete map of your target chip.
# Use 0x800000 for 8MB chip sizes, 0x400000 for 4MB chip sizes, etc.
$ srec_cat chip2file.txt -fill 0xff 0x000000 0x800000 -o chip2file.bin -raw
# Convert a Hex-Dump into a complete map of your target chip.
# Use 0x800000 for 8MB chip sizes, 0x400000 for 4MB chip sizes, etc.
$ srec_cat chip2file.txt -hexd -fill 0xff 0x000000 0x800000 -o chip2file.bin -raw
# convert a binary boot rom file into Motorola S-Record
$ srec_cat boot.rom -raw -o boot.srec -obs 0x40 -esa 0x00
# strip 0xff bytes, but allow a runlen of 16 bytes
$ srec_cat boot.srec -uf 0xff 0x10 -o file2chip.txt -obs 0x40 -esa 0x00
# check file integrity before flashing
$ srec_info file2chip.txt
# convert a binary boot rom file into Hex-Dump
$ srec_cat boot.rom -raw -o boot.hexdump -hexd
# check file integrity
$ srec_info boot.hexdump -hexd
# prepare for flashing
$ cp boot.hexdump file2chip.txt
# strip all 0xff bytes from the boot file
$ srec_cat boot.srec -uf 0xff -o test0 -do
# convert the chip readout into same layout
$ srec_cat file2chip.txt -uf 0xff -o test1 -do
# diff the files, their data lines should match
$ diff test0 test1
# check file integrity
$ srec_info chip2file.txt -hexd
# convert the boot file into Hex-Dump for comparison
$ srec_cat boot.hexdump -hexd -uf 0xff -o test0 -hexd
# convert the chip readout into Hex-Dump
$ srec_cat chip2file.txt -hexd -uf 0xff -o test1 -hexd
# diff the files, they should match
$ diff test0 test1
If you need to fill memory areas with constant values, please use menu
option “I: flash file
” with a prepared file2chip.txt
file.
I.e., to fill page 3 of a paged 8MB SPI chip with 0xee
, prepare your
file2chip.txt
like so:
$ srec_cat -gen 0x000300 0x0000400 --constant 0xee -o file2chip.txt
To use random data, type:
$ srec_cat -gen 0x000300 0x0000400 --random -o file2chip.txt
Please refer to
to get to know more about srecord
’s data generators.
Note some simple consumer SPI chips do not provide a chip erase
command. Their memory may be cleaned to 0xff
by this method!
Zerocat Chipflasher is designed for flashing BIOS chips reversely, that is: Power is applied to the chip, thus sending currents into the system board backwards.
Note that the power traces around the BIOS chip surely are not designed for the currents that some system boards (X60, T60) will draw. If we power the BIOS chip, some target system boards will draw much more current that would probably be needed to flash successfully. Therefor, we need kind of current limiting circuit. Examples: X60, T60
The only current limiting 'control' that we do have, is: - the Polyfuse - the capability of the regulator in use - the scope of the incoming power
The Polyfuse seems to get hot for currents above its hold current, thus already limiting the current. Higher currents make the device to shut down the board after a while, thus leaving a small time window where we can take action (i.e. T60).
This time window could be used multiple times if we allow the fuse to cool down in between. This is very annoying and makes that flashing procedure slow as we are flashing sector by sector, but note the main goal should be not to damage the target system board!
Unfortunately, the chip’s supply voltage of a T60 doesn't reach its minimal value of 2.7V with supply currents below 2 Ampères – bigger currents would probably destroy the board and doesn't seem to help anyway.
Therefore, we won't be able to flash a T60 safely within specs by driving power backwards into the sysboard :-(
However, when using a combination of an LD1117-3.3 (800mA) voltage regulator, 1000µF power capacitor and a Polyfuse RXEF075, we can flash and read the T60 in one go with a chip supply voltage around 2.5V, which is not too bad!
We should be able to boot coreboot and then flash a second time from user space, within specs.
TODO: Let’s try Peter Stuge’s method as well.
TODO: Monitor the overall current or Polyfuse heat or even better add a dedicated current limiting circuit for the SPI Bus.
The power shunt in board-dev.sch allows us to monitor the overall return current.
Current = Voltage across Power Shunt / Power Shunt’s Resistor Value
If not otherwise noted, the CE# pull-up is adjusted to its maximal value (245Ohms).
NOTE: Note that the selected Polyfuse RXEF075 is getting hot beyond 0.019V and would trip immediatly at 0.038V (1500mA). However, the voltage regulator in use is not capable of supplying more than 1000mA.
overall current up to 1000mA
T60-2MB-Atmel (SOIC8):
0.0245V; Vdd_SPI = 2.7V –› 2.55V ––› 2.49V –––› 2.47V
X60s-2MB-SST (SOIC8):
0.023V; Vdd_SPI >= 3.0V
overall current up to 500mA
GA-G41M-ES2L (SOIC8):
0.0125V
T500-Winbond-8MB (SOIC16):
0.0075V; CE# pull-up approx. 100Ohms
T400-Macronix-8MB (SOIC16):
0.0075V; CE# pull-up approx. 100Ohms
X200-Atmel-4MB (SOIC8):
0.0068V; CE# pull-up approx. 100Ohms
X220-8MB-Winbond (SOIC8):
0.0065V
X200-Macronix-8MB (SOIC16):
0.0065V;
X200-Winbond-8MB (SOIC16):
0.0063V; CE# pull-up approx. 145Ohms
overall current up to 200mA
D945GCLF (SOIC8):
0.0039V
X230-Macronix-8MB-4MB (2x SOIC8):
0.002V
As we are using USB ports as unclassified devices, we are not allowed to draw more than 100mA per port (200mA in total) if we want to stay within official USB specs. Thus the chipflasher needs to be self-powered through an external power supply for targets that take more current.
However, if we don't care about official USB specs, using two USB ports with a non-standard Y-USB-Cable works just fine as well on a ThinkPad X60.
This docking station seems to have very robust USB-Ports which can deliver up to 2.2Amps before a crowbar protection gets active. Then they are dead until you reboot after a while.
These RS232 data cables have been used during development. Their pinouts are provided here in the hope they will be useful.
Number 1) and 2) seem to be the best, for they have proper grounding of GND and Protective GND. Usual length of each cable is about 100cm.
DTE = Data Terminal Equipment (Host)
This side is using a DB9 plug.
DCE = Data Communication Equipment (Chipflasher Board)
This side is using a Header9_1 Connector.
All pin names reflect their function from the host’s point of view (DTE pin labels). See chipflasher-page11.sch or chipflasher-page11.sch.png for more details.
DTE Function | DTE pin label | DTE pin | DCE pin | Zerocat Connect Usage (Host)
------------ | ------------- | ------- | ------- | ----------------------------
Carrier Detect | CD | 1 | 1 | not used
Data Set Ready | DSR | 6 | 2 | not used
Receive Data | RXD | 2 | 3 | receive data
Request To Send | RTS | 7 | 4 | alternative reset line
Transmit Data | TXD | 3 | 5 | transmit data
Clear To Send | CTS | 8 | 6 | not used
Data Terminal Ready | DTR | 4 | 7 | default reset line
Ring Indicator | RI | 9 | 8 | not used
Ground | GND | 5 | 9 | gnd, power return
DTE pin label | DTE pin | colour | DCE pin
------------- | ------- | ------ | -------
CD | 1 | brown | 1
DSR | 6 | grey | 2
RXD | 2 | blue | 3
RTS | 7 | green | 4
TXD | 3 | red | 5
CTS | 8 | yellow | 6
DTR | 4 | violet | 7
RI | 9 | orange | 8
GND | 5 | black | 9
PGND | 5 | shield |
DTE pin label | DTE pin | colour | DCE pin
------------- | ------- | ------ | -------
RXD | 2 | white | 3
TXD | 3 | red | 5
DTR | 4 | green | 7
GND | 5 | yellow | 9
PGND | 5 | shield |
DTE pin label | DTE pin | colour | DCE pin
------------- | ------- | ------ | -------
RXD | 2 | brown | 3
RTS | 7 | white | 4
TXD | 3 | orange | 5
DTR | 4 | green | 7
GND | 5 | blue | 9
DTE pin label | DTE pin | colour | DCE pin
------------- | ------- | ------ | -------
DSR | 6 | white | 2
RXD | 2 | black | 3
RTS | 7 | yellow | 4
TXD | 3 | brown | 5
DTR | 4 | red | 7
GND | 5 | orange | 9
This history gives you a version overview of the chipflasher firmware,
software and documentation – in contrast to its hardware, which is
represented by files under the ../hardware
folder. To see the version
history of the hardware, please check #../doc/board-version-history.md
instead.
v<major>.<minor>.<revision>[-<number-of-new-commits>-<commit-hash>]
NOTE: Tags are using the first three numbers only, i.e. v0.1.0
.
v
– This letter indicates a version tag.<major>
– The resulting product is a major change or upgrade.<minor>
– Additional functionality or new features are introduced.<revision>
– Bug fixes, minor changes, graphical stuff.-<number-of-new-commits>-<commit-hash>
– commit description as
retrieved with git describe
, but git specific ‘g’ marker stripped
off, e.g.: -79-g7ccc6034
-> -79-7ccc6034
A fully qualified version description thus might look like this:
v0.4.10-79-7ccc6034
General
../doc/THANKS.md
HTML Documentation
Review documentation structure, create one main entry point, link other documentation roots via Home button, move some buttons, update chip documentations, use just one theme configuration file.
Fix name of TTY port pointer.
Makefiles
Improve readability, rename macros, strip white spaces, improve recipes to catch errors, use automatic variables without parantheses, mute recipe outputs.
Support the generation of a project archive.
Refine recipe for automatic collection of copyright notices.
Improve device operation:
Use ../host/start/Makefile
to configure, compile and upload
firmware and get started.
Use connect
and ../host/start/Workflow.mk
to process in- and
outgoing data.
Use flashrom
.
Board Configuration File
Kit User Guide
Firmware1 (kick
)
kick
: firmware1kick
.Firmware2 (kick2
)
*.spin
files.Host utility connect
connect
session.kick
and kick2
into account.The Makefile in ../firmware/src/
offers targets config-BOARD_V1
and
config-BOARD_V2
, which help you to configure the firmware for the
chipflasher board (board v1, default) or the testboard (board v2).
The new features of the testboard – SPI voltage monitor, DIP switch
configuration block, RST pulse detector, hardwired board version – are
not yet supported by kick
.
File ../firmware/src/libkick/proppins.h
offers different pin usage for
board v1 (chipflasher) and board v2 (testboard).
Improve test for proper inkscape version.
Fix clean target in respect to usage of hash character.
Note project’s incompatibility with Trisquel 10.0.1, as some packages are too old or not provided. The GNU Guix Package Manager should help.
Maintain Makefile compatibility with dash
, as used on Trisquel.
Update shortcuts to match URLs of new Parallax Website.
Adapt Makefiles for buggy GNU Make < 4.3: Finalize commands within $(shell) function with semicolon.
Update list of supported targets and point to kick2
, the second
firmware approach, see ../firmware2/doc/NEWS.md
:
This version takes advantage from updated files under ../hardware/
,
see ../doc/board-version-history.md
.
#../doc/chipflasher.md
shows detailed circuit information
and refers to generated HTML BoM files.gschem
and pcb
files, and archives.../guix/manifest.scm
has been updated for better gschem
support.../doc/targets.md
: Point to kick2
cooling features for
targets X60 and T60. See file ../firmware2/doc/NEWS.md
.../host/src/ANSI-color-escape-sequences.h
.Branch firmware2-wip has been merged into master.
As a result, the second firmware approach called kick2
is available
in ../firmware2/src/
, whereas the default firmware called kick
is
offered in ../firmware/src/
just as before.
Both programs are configured to start with an interface to connect
,
this project’s own host utility.
Follow advices in ../doc/README.md
to build the complete
documentation.
If interested in trying kick2
with its interface to flashrom
,
checkout branch flashrom-interface and see what has been achieved.
../doc/README
.git log
output.Add image titles.
Add screenshots.
Change the documentation system:
It is based on Zerocat Project Template v0.0.10 and has then been improved. Copyright has been transferred to collected project authors.
Add new features, improve functionality, finalize the interface:
Refine prompt usage, display input level at D1 (green LED). Display activated key options within prompt. Show menu upon request only. Improve key input, catch control keys in order to avoid corrupted input.
Review and rename several files, functions, types and variables.
New devices supported via timeout:
New devices supported:
Clean up documentation files, fix markdown syntax and style:
List of software tools has been refined, e.g.:
inkscape@1.1
make@4.3
File @ref host/guix/manifest.scm can be used with guix environment
to prepare a pure environment.
Makefiles improved:
v1.2.0-5-c4f9a3e
Some fixes applied:
clean up macros, set up OUTC()
in conjunction with OUTC_DEBUG
increase buffer sizes in @ref host/src/connect.h to enable larger line transmissions
review ledstat() in @ref firmware/src/kick.c, improve set of macros in @ref firmware/src/kick.h
fix obsolete and wrong pin descriptions in @ref firmware/src/libkick/proppins.h
This version is ready to be run on GNU Guix System.
Cherry-picked commit: Adjust type qualifier in
firmware/src/kick.c
and save some bytes, so that the full
version number won't make the binary exceed 29000 bytes.
Tiny fixes in RS232-cable-pinouts.md
Rolling version number
Updated documentation, reviewed list of software requirements
Improved set of Makefiles, ready to be run on Trisquel or GNU Guix System
Makefiles: Detect non-available utilities and exit with error status
File firmware/src/Makefile
, provide targets to download Parallax’
Library Archive
Use logo image with black background, as old transparent background causes confusion
This version basically comes with an improved set of Makefiles and
configuration files, most prominently ../host/src/Makefile
and
../host/start/Makefile
. The first builds the entire software, the
latter is what you need to operate the chipflasher: It lets you load
the firmware, start the menu, and helps to deal with in- and outgoing
chip data. The documentation has been updated. Utility scripts have
been deleted and bash
has been removed from the list of tool
requirements.
The buildchain automatically retrieves the softare version from tag
PROJECT_NUMBER
in ../doc/doxygen-resources/Doxyfile.orig
.
Makefiles consistently offer a help and a hello target.
Prototypes for ledstat()
and burn()
have been changed in order to
address compiler warnings.
Boards X230t and X201 have been tested and are now listet in
supported-devices.md
.
Chip MX25L6445E, found on X201, is now part of the IDJEDECMX25L6445E06E05D chip definition.
This version basically comes with an improved documentation
buildchain, as ../doc/Makefile
and ../hardware/Makefile
have been enriched to provide better results. Visual feedback during
the make has been added. Some important settings are retrieved from
the ../doc/doxygen-resources/Doxyfile.orig
directly. The documentation
buildchain is using /bin/sh
for subshells.
The ../doc/frontpage.md
now refers to all four Makefiles, i.e.
../doc/Makefile
, ../hardware/Makefile
,
../firmware/src/Makefile
and ../host/src/Makefile
.
File ../doc/board.md
provides automatically generated labels as a PNG
and PDF file.
File ../doc/software-tools.md
List shells dash (/bin/sh
) and bash (/bin/bash
) as a
requirement, as usage of bash has not yet been dropped
completely.
List Inkscape as a requirement.
Exclude files that produce strange results with doxygen.
Review configuration files and makefiles, fix dependencies.
Improve error handling in startfile.mk
.
Fix english spelling (i.e. whether, separate).
Fix lists’ indentation in change log files ../doc/version-history.md
and ../doc/board-version-history.md
.
Rename files, use lower case for startfile.cfg
and startfile.mk
,
but add Startfile.mk
as a symbolic link to provide backward
compatibility.
Drop function do__WIP_polling()
in ../firmware/src/kick.c
, which saves some
bytes and keeps RAM usage below 29000 bytes.
Merge branch wip, increase chipspec.c
database, update
../doc/supported-devices.md
.
Apply a consistent documentation header pattern for all files by
forcing doxygen to use the C-parser with unsupported filename
extensions. Turn comment lines marked with ##>
or ;;>
into
C-style comments beforehand. Use \@cond..\@endcond directives to
avoid parsing of non-C code.
Review the documentation, improve the doxygen outcome, set up new groups aka modules.
Use ../doc/files.dox
, ../doc/modules.dox
and ../doc/images.dox
to improve the documentation.
Drop struct member pagesize
from chip’s database, which saves some
bytes. If command X02_PP
is available for the chip in question, use
a hardcoded pagesize of SIZE_256
instead.
Add support for chips EN25QH54 and MX25L12835E. The former is occasionally found on an X230, the latter is very common for the T430s.
Add read support for security registers, which are accessible via
X2B_RDSCUR
and X2F_WRSCUR
commands on some chips. Security
registers are displayed in conjunction with status registers, using
menu option [r] show register values
. Write access is not yet
implemented.
Update and fix database in ../doc/supported-devices.md
.
Update version and copyright time range in license header message.
Fix reference to webpage in ../doc/README.md
, reflect state of
maintenance.
Use more descriptive menu option strings.
Adapt text color and provide better contrast with default trisquel8 terminal settings.
Remove experimental function declaration, which produces a gcc warning.
Add Zerocat Favicon to generated documentation.
Improve documentation related to Propeller toolchain setup.
Modify header strings, use one version only for both, connect
and
kick
.
Provide clip info for X60.
Add X200 Tablet to list of supported devices.
Move improved script utilities into newly created folder ../host/util
.
Modify chip database in order to securely support the ThinkPad T430 and its Macronix SPI chips.
Add GA-B75M-D3H Desktop Board to list of supported devices (readout tested only).
File ../doc/parallax-tools.md
: Update with most recent GNU Guix Version.
NOTE: This version works best with board versions board-edition-1 and board-v1.2.0.
File ../doc/parallax-tools.md
: Provide exact software version infos
File ../doc/Makefile
: Add some .PHONY targets in order to facilitate
Zerocat’s website build process
Direct users to Zerocat Website in order to get shop information
Remove branding of suggested or recommended hardware
Small fixes within the documentation
In the documentation, references to the chipflasher webpage now point
to: http://zerocat.org/chipflasher-board-edition-1.html
Macro VERSION is introduced which helps to emit the software’s
version on screen. This macro should match PROJECT_NUMBER
tags
of doxygen’s *.orig
config files in ../doc/doxygen-resources/
.
Bug fix: Job cancellation requests are processed even in case of transmission timeouts.
In several functions, flow control and feedback loop has been reviewed.
A compiler switch has been added to facilitate experimental re-allocation of line buffer space on the fly.
Handling of internal error codes has been simplified.
On startup, connect
now checks whether the serial port is already
busy.
Due to trademark concerns, a “Zerocat Logo License” has been added to the set of licenses. This license has been inspired by Trisquel’s Logo Page.
The reset pulse issued by connect
has been extended in order to
make an MAX3232EPE+ chip start reliably.
Dependencies for the documentation build process have been fixed in order to avoid doxygen error messages.
Chip detection has been fixed (i.e. ThinkPad T60) and improved, a zero JEDEC ID due to power failure or misplaced SOIC clip is handled with an individual message.
This version works best in conjunction with board version board-edition-1, please compare to #../doc/board-version-history.md.
The chip database has been reviewed. The default entry is used as unknown chip without capabilities, thus increasing security against accidental key strokes. T60’s BIOS chip has been added. Bits of status registers are now each tagged as volatile/static.
Global sector protect/unprotect features are now supported for Atmel chips as well.
The chip readout function has been deeply improved; transmission
errors are now reliably detected by connect
and the data lines in
question are resent by kick
upon connect
’s request.
Obsolete features like increase/decrease UART FiFo Size and UART IRQ Latency have been deleted; they didn't work anyway.
Transmission status report now follows a three color pattern known from traffic lights. You will be able to grab the status at a glance:
Probing the chip with menu option [d]
now works more reliable, for it
automatically issues three subsequent trials.
Error report has been improved, a missing file for data storage on disk will be reported.
The menu status line has been relieved from obsolete infos.
Three script utilities have been added to folder ../host/src/
.
In order to make it quit more reliably, kick
’s exit sequence is
repeated.
This version works best in conjunction with board-v1.1.0.
Note that older boards may still be used, but the configuration file should be modified according to twisted pin functions.
Nets PINPNP and PINPLUGTESTn have exchanged their pin numbers.
A small delay has been added in SPI_ini()
, thus making the
Gigabyte GA-G41M-ES2L sysboard accessible.
The menu option '[q] - quit/cancel' will now switch the SPI bus off as an intermediate step in case it has been left powered for devices with a non-static status register.
A wrong copyright note has been reverted.
Improve hardware documentation...
Make the chipflasher repository freely distributable...
Yep, this is a real version! It comes with a complete set of licenses.
File ../doc/README.md
explains how to start and the license setup.
Source files are enriched by appropriate license headers.
A license hint is provided when connect
starts up.
Codesize has been further reduced to guarantee enough runtime RAM.
All documentation source files have been reviewed, sections have been rewritten.
A screenshot of an invocation example had been added to ../doc/images/
.
The folder doc-generator/
contains reviewed doxygen resources and
an updated Makefile. All generated documentation output will be
created in doc/
.
Unfortunately, version v0.2.1 introduced a severe bug, due to exorbitant HUB-RAM usage. The system will hang. This commit reverts the commit that introduced that bug and reduces code size by 20 bytes. Now, flashing should work fine although we are still pretty much at the edge.
Important bugfixes for chip readouts:
An address roll-over will now be catched.
The Motorola S-record format now comes with an inline-0xff blob of up to 16 bytes, thus decreasing transmission overhead.
In contrast, the Hex-Dump format is a real dump. Each byte is listed.
New features:
The mode that is used to deal with 0xff bytes is shown in the menu status field.
The roll-over feature when scrolling up/down with some menu options has been removed to reduce confusion.
This version must be used with board-v1.0.0 and later, however board-v1.0.5 is recommended due to its pnp MOSFET.
This version may be used with all v0-boards (i.e. below board-v1.0.0), usage is probably limited to X60/X60s and X200/X200s sysboards.
This history gives you a version overview of the chipflasher hardware
in contrast to its firmware or host utility software. The chipflasher
hardware is represented by files under the ../hardware
folder, most
prominently to mention the ../hardware/gschem/chipflasher-page??.sch
circuit schematic files. To see the history of firmware, software and
documentation, please check #../doc/version-history.md instead.
board-v<major>.<minor>.<revision>[-<number-of-new-commits>-<commit-hash>]
NOTE: Tags are using the first three numbers only, i.e. board-v0.1.0
.
NOTE: There may be exceptions, which do not follow the Board Version Scheme.
board-v
This prefix indicates a version tag which is related to the hardware.
<major>
Hardware has changed. The resulting product is a major change or upgrade. You will need to upgrade your firmware and/or equipment and/or PCB due to incompatibilities with the previous version.
<minor>
Onboard hardware has changed. Additional functionality or new features are introduced. You are allowed to re-use the PCB, though.
<revision>
No changes of hardware. Bug fixes, minor changes, graphical stuff.
-<number-of-new-commits>-<commit-hash>
Commit description as retrieved with git describe
, but git
specific ‘g’ marker stripped off.
Chipflasher board v2 design sources released!
Circuit schematics and PCB design files are now publically available.
Hardware Design Sources are licensed under CERN Open Hardware License Version 2 – Strongly Reciprocal or any later version.
You may redistribute and modify the sources and make products using it under the terms of the CERN-OHL-S v2 (https://ohwr.org/cern_ohl_s_v2.txt) or any later version.
This ensures that the source location of the Chipflasher, being engraved into the copper of the PCB, remains with the physical product and its derivatives ;-)
Circuit schematics of testboard v2 have been transferred and adapted.
See ../firmware2/doc/NEWS.md
for a list of new features.
Until physical PCBs are available, the new PCB design comes with: Hardware UNTESTED!
Changes will now be tracked with ../hardware/CHANGES.md
.
Chipflasher testboard circuit schematics advance towards testboard-v2!
The testboard circuit schematics have been advanced towards a
board v2 prototype. New features are introduced, these are
supported by kick2/flashrom
. See ../firmware2/doc/NEWS.md
.
Some gschem
symbols have been copied and fixed in order to support the
reviewed testboard schematics. They are located in
../hardware/gschem/symbols
.
In respect to chipflasher board schematics, the testboard schematics use some pins of the controller in a different way.
The source code distinguishes both board versions as board v1
(chipflasher board) and board v2 (chipflasher testboard). As default,
firmware kick
uses board v1, whereas kick2
uses board v2.
Makefiles in ../firmware/src/
and ../firmware2/src
offer
appropriate configuration targets.
Improved Makefile in ../hardware/
now deals with local gschem
symbols.
Target clean-backups
takes *.sym~
files into account.
File ../hardware/gafrc
points to local symbol folder and makes it
available as Chipflasher symbols to gschem
, when invoked fromout
../hardware/
.
../hardware/Makefile
removes gschem
autosave and backup
files with target clean-backups
.The PCB of this version still is fully compatible with board-v1.1.0 and board-edition-1. Set jumper across J4:2 and J4:3.
Add handy synchronization target to: ../hardware/Makefile
Synchronize PCB file with schematic: ../hardware/pcb/board.pcb
Rotate non-polar capacitors C6 and C7 in:
../hardware/gschem/board.sch
Add more descriptions, refine comments to ensure nice output:
../hardware/gschem/board.sch
Process schematics’ description attributes to BoM Files.
Connect MAX3232’s pin 10 to GND:
../hardware/gschem/board.sch
, ../hardware/pcb/board.pcb
Set C1 capacitor value to same as noted in schematic:
../hardware/pcb/board.pcb
Stamp generated files with current version, using different name
space for pcb and cover label: ../hardware/Makefile
Remove obsolete scheme script. Instead, use gaf export
and
ImageMagick’s convert
for image generation:
../hardware/Makefile
Fix fuse value: board.pcb
Remove polarity from capacitor footprints around MAX3232, set correct
values: ../hardware/pcb/board.pcb
Strip white space from comments and text elements, otherwise gschem’s
output is screwed up: ../hardware/gschem/board.sch
Remove obsolete layout attribute: ../hardware/pcb/board.pcb
Update source files to new file versions:
../hardware/gschem/board.sch
, ../hardware/pcb/board.pcb
We continue to use the unmodified PCB of tag board-v1.1.0.
New file ../hardware/Makefile
This file replaces its origin (../hardware/doc/makefile
) and now
comes with a set of rules that deal with hardware source files by
means of utilities like gschem
, gnetlist
, pcb
, inkscape
and gerbv
. Initial settings are clearly set up, now, and SHELL
is set to /bin/sh
.
The default goal all
covers all targets, except gerbv
:
$ make
With $ make gerbv
instead, layers of the pcb source file will
be exported and the gerbv
utility is started with these layers
already loaded. Checks are to be performed within the GUI, as CLI
flags are missing.
Goal label
creates labels with the device’s correct hardware
source file version noted, i.e. board-v1.2.2. These labels come
as PDF and PNG files. (The resulting PCB still is that of
board-v1.1.0, as its pcb source file has not been touched. This
unfortunate version numbering scheme with board- as a prefix is
likely to be mistaken as a pcb-version. It should be changed into
something like hardware-v1.2.2 or device-v1.2.2, probably.
Terms hardware and device are welcome to cover all aspects of
the hardware, not just that of a board or pcb.)
Further goals are: auxiliaries
, images
, markdown
,
gerber
and check
Goal clean
gives you a clean environment. It is used rather
than cleanall
. Where applicable, goal mostlyclean
gives
you an option to keep some output.
Manually created files (PNG, PDF) in ../hardware/artwork/
have been
removed. They are now generated via ../hardware/Makefile
.
We continue to use the unmodified PCB of tag board-v1.1.0.
Changes in file ../hardware/doc/makefile
:
This file has been renamed using lower case letters. This avoids ambiguities within the generated documentation.
Rules have been reviewed, dependencies in respect to
../hardware/gschem/attribs
have been added.
Clean rules do not use rm -f
, but errors are ignored.
The file now carries a documentation header with copyright and license notes.
Same as board-edition-1, but we resume the Board Version Scheme as described above. This helps us to avoid ambiguities from now on as the version board-edition-1 is RYF-Certified and must not be linked to any changed content. Note the front panel sticker has been updated accordingly.
We continue to use the unmodified PCB of tag board-v1.1.0.
General info:
We continue to use the unmodified PCB of tag board-v1.1.0.
This board version works best in conjunction with software v0.4.3, please compare to #../doc/version-history.md.
The file ../hardware/doc/Makefile
has been improved:
.PHONY
has been updatedUpgraded comments in ../hardware/gschem/board.sch
:
Add a comment about upgraded Polyfuse in file
../hardware/gschem/board.sch
.
An unused pin of the RS232 driver should be tied to GND. The documentation now suggests a manual bug fix.
Add a comment about missing pcb heatsink copper area.
Device upgrades as drop-in replacements in ../hardware/gschem/board.sch
allow us to access the sysboard of a ThinkPad T60 while access to a
ThinkPad X60/X60s sysboard now works more reliable as well:
We merge in all improvements of the branch go-for-board-edition-1 while not using the tag board-edition-1 within the git repository itself, yet. This gives us room to fix and complete the documentation until that tag is finally placed. Note chipflasher devices shown on photos are already labelled with a board-edition-1 sticker, however.
We add the file front-panel.dxf
to the list of source files.
We continue to use the pcb of version board-v1.1.0.
We continue to use the software version v0.3.0.
The file ../hardware/pcb/board.pcb
has been reverted to version
board-v1.1.0 which allows us to use already manufactured PCBs in
conjunction with updated files and front-label version tags.
We used to use a MAX232 chip which is not explicitly rated for a 3V
Power Supply, therefore ../hardware/gschem/board.sch
and
../hardware/gschem/board-dev.sch
have been updated with a 3V compatible
device like the MAX3232CPE+. This chip allows a smaller blocking
capacitor and smaller charge pump capacitors as well.
Clearance of some forgotten vias has been adjusted to 15mil.
A spike shaped route has been improved.
Board’s version number in the pcb layout file has been set to: board-v1.1.1
A second linear power regulator has been added, which separates the Propeller’s supply from that of the SPI bus. That way, the chipflasher is independend from power failure due to high inrush currents when the target sysboard is powered.
That allows as well to enable the Propeller’s built-in Brown-Out-Detection: Pins keep a well defined level even if the supply voltage is not certain, a very usual situation during power-off.
Furthermore, a simple overcurrent and overvoltage protection has been
added right behind the USB power entry. A Polyfuse is used, which
limits the maximal USB current to about 1000mA. Currents of up to 500mA
are well in range, which is enough for all tested boards except the
ThinkPad-X60s sysboard. However, the latter still can be flashed
although current consumption is throttled to around 700mA by the
Polyfuse. (Note that the related developer board (board-dev.sch
) is
equipped with a 0.025Ohms PowerShunt which facilitates overall current
measurement.)
NOTE: This version ships with a first elaborated pcb layout file, which is untested by the time of writing.
WARNING: To ease pcb layout, two pins have been twisted, thus requiring the updated firmware version v0.3.0 (See #../doc/version-history.md for details.)
The pnp transistor has been replaced by a pnp MOSFET, because when flashing the X220 the transistor gets too hot.
Add standard SPI chip layout examples, which are handy to have available when connecting the SPI-Cable.
Small bug fix: A junction had been misplaced.
Generate new devices numbers, they will be used in the bill of materials (bom.md).
Update SPI cable to new SPI connector layout.
WARNING: This should be regarded as a major hardware change! Upgrading your firmware is required!
This board supports more sysboards.
two port pins for sinking CE#
different propeller pin function layout
adjustable CE# pull-up
SPI connector is 9x1 again, but layout has changed
different base network of pnp transistor
big cap for SPI power (in conjunction with protection diodes from board-v0.4.0)
This board requires a firmware update.
Board with protection diodes across power regulator, in preparation for next board version.
First Tandem-Workshop. Board with different SPI connector, uses 5x2 pinheader.
Starts from RAM as well.
Reset line is DTR or RTS (optional).
First board that has been shipped for testing.
Initial board.
The PCB layout that ships with the tag pcb-prototype on branch master has been milled into copper in order to prove suitability. However, using that file for production purposes is not recommended. Several fixes were necessary.
worked PCB layout
This is a short photo documentary of the hardware production process:
PCB milling has just finished
The copper board has been milled during an introductory workshop in the FABLAB Berlin.
PCB cleaned up
Cleaning the PCB is important, otherwise you will have to deal with dust located in the gap-routes when you want to apply clear varnish later.
Soldering difficulties on component side
Sockets and parts with a big footprint should not to be soldered to top layer pads, this turns out to be very difficult and tricky. For example, to solder an variable resistor, you will need to use a vacuum pump while pressing the part firmly onto the surface. When done, you are lucky if the pins are still connected. And note that for some reason drilling was not always centric.
How to solve soldering difficulties on component side
Top layer pads should be large, otherwise you will have to lever sockets or chips a bit in order to use their thin legs.
Assemblage complete
When the board is fully populated, don't forget jumpers!
Apply a clear varnish over all, but cover important contacts.
The PCB Prototype in action
It worked right from the start. What you can see here very well is the SPI-cable which uses distances for its wires, in order to prevent signal interferences. The target shown on the photo is a T500 motherboard.
Handmade Chipflasher with Accessories
|<--- 80mm -->|
+---------------------------------------+ ---
| O ###### O | ^
| ###### | |
| [X] Power Switch ###### D1 o | |
| ###### | |
| o LED Power ###### D2 o |
-------+ ###### |
: USB | ###### D3 o |
: Power| ###### |
-------+ ###### |
| o SPI Power ###### |
| ###### _________|
| ####### ##/\## |SPI-Bus |
| ####### | |
|__________ Jumper | PLUG# | 100mm
|RS232 DTE| x DTR | GND |
| Labels | x RST | WP# |
|NC | GND| o RTS | MISO |
|RI | DTR| | CE# |
|CTS | TXD| ___ | MOSI |
|RTS | RXD| |R| | SCLK |
|DSR | CD | |e| | HOLD# |
|_________| |s| | VDD |
| |i| |________|
| ### |s| SPI LED o | |
| ### ### |t| | |
| ### ### |o| | |
| O ### ### |r| O | v
+-------------------- |…|---------------+ ---
^
Some first devices where manufactured, checked out at tag board-edition-1 on branch master.
These devices have been certified to respect computer users’ freedoms by the Free Software Foundation in Boston, USA.
First Series with sponsored PCBs
A non-critical bug can be fixed by soldering a short wire on the bottom side of the PCB:
One input pin was left floating by mistake, instead of tying it to ground level.
Manual Bug Fix on Bottom Side: Black Wire
Version 1.3, 3 November 2008
Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. http://fsf.org/
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.
This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.
We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.
This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.
A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.
A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.
The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.
The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.
A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".
Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.
The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.
The "publisher" means any person or entity that distributes copies of the Document to the public.
A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.
The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.
You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.
You may also lend copies, under the same conditions stated above, and you may publicly display copies.
If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.
If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.
If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.
It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.
You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:
If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.
You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties—for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.
You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.
The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.
You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.
The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.
In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".
You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.
You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.
A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.
If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.
Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.
If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.
You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License.
However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it.
The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.
Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document.
"Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site.
"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization.
"Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document.
An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008.
The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing.
To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:
Copyright (C) YEAR YOUR NAME.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with … Texts." line with this:
with the Invariant Sections being LIST THEIR TITLES, with the
Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.
If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. http://fsf.org/
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
The GNU General Public License is a free, copyleft license for software and other kinds of works.
The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.
When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.
Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and modification follow.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based on the Program.
To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.
The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work.
A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.
The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.
The Corresponding Source for a work in source code form is that same work.
All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.
When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.
You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.
You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.
You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:
A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.
"Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).
The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.
"Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:
All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.
You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).
However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.
A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.
If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.
A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.
If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.
Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.
The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.
If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.
Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands \show w' and \
show c' should show the
appropriate parts of the General Public License. Of course, your
program's commands might be different; for a GUI interface, you would
use an "about box".
You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see http://www.gnu.org/licenses/.
The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read http://www.gnu.org/philosophy/why-not-lgpl.html.