gnupic: Re: [gnupic] [ANN] Pikme PIC Bootloader (for 16F819 etc)


Previous by date: 25 Jul 2006 15:05:23 +0100 [ANN] Pikme PIC Bootloader (for 16F819 etc), Frank Sergeant
Next by date: 25 Jul 2006 15:05:23 +0100 Re: [gnupic] [ANN] Pikme PIC Bootloader (for 16F819 etc), Tamas Rudnai
Previous in thread:
Next in thread: 25 Jul 2006 15:05:23 +0100 Re: [gnupic] [ANN] Pikme PIC Bootloader (for 16F819 etc), Tamas Rudnai

Subject: Re: [gnupic] [ANN] Pikme PIC Bootloader (for 16F819 etc)
From: Byron A Jeff ####@####.####
Date: 25 Jul 2006 15:05:23 +0100
Message-Id: <20060725140515.GA980@cleon.cc.gatech.edu>

On Mon, Jul 24, 2006 at 05:59:22PM -0500, Frank Sergeant wrote:
> The Pikme PIC Bootloader is available at
> 
>           http://pygmy.utoh.org/pikme
> 
> I call it "The World's Simplest PIC Bootloader".

I took a read. Very impressive!

> It is set up for the PIC16F819 but should be easy to modify for other
> PIC variants that are capable of programming their own flash memory.

Cool. And it already has the Row Erase Routine in it.

> All source is included and commented extensively.  License is
> MIT/BSD-style.

Again Excellent! The bootloader I was working with 
(Octavio Nogueira's ####@####.#### 16F819 bootloader from 2004
had similar licensing requirements.

> The downloader is in Python.  I run it under Linux (Debian) but it
> should run at least on Unix/Linux/Windows (anywhere Python and its
> serial module run).

Good choice. That's make the code portable.

> It uses only half of an I/O pin on the PIC (that is, it can use an
> input-only pin) and even that pin can be used for other purposes by the
> application, providing it doesn't wiggle at boot time.

Interesting choice. That's getting close to Wouter van Ooijen's ZPL
which used wiggling on MCLR to reset the PIC after specific time delays.
The length of time that the PIC ran determined the bit transmitted.
ZPL = Zero Pin Loader.

> It uses a one-way serial interface from the PC to the PIC (so, 2 wires:
> the PC's TX pin and ground).  It is bit-banged to do inverted TTL serial
> (fake RS232) so that no MAX232 or similar is needed.

Depending on the serial port, this may be a problematic choice. Unfortunately
some serial ports don't even come close to generating the 4V required to 
register as a 1 on the PIC. And unfortunately it's in spec because RS-232
allows for 3V or higher to be a valid signal.

Also I read your pinouts.txt file. Using a pot to tune the voltage is a bit
time consuming. A better choice may be to refer back to Wouter's El-Cheapo
serial bootloader interface. The schematic is located here:

http://www.voti.nl/wloader/wl2-2.gif

A description can be found for the WLoader project in the parent directory
of that image file. Simply put the R2/D1 resistor/5V zener interface is
sufficient to solve all of the voltage issues, giving output from about
-0.5V to 4.7V or so to the PIC pin. No tuning necessary.

It's the interface I use on all of my current bootloader projects and it
works well.

Note that Wouter voices some concerns with trusting the PIC protection
diodes to clamp and keep the part working properly. Frankly since a 10
cent zener (well a 65 cent one if you buy from the RatShack) can easily
do the job, why not use it?

> I use it with the RA5/Vpp/MCLR* pin but 3 equates in the source code
> allow you to use another I/O pin if you prefer.

In addition you can switch to a full I/O pin, add the R1/R3 resistors and
get a serial output channel on that same pin.

> The downloader picbl.py needs the name of the hex file and the number of
> the serial port.  So, to download dummy1.hex via the second serial port
> (COM2: on Windows, /dev/ttyS1 on Linux), you would run something like
> 
>        python picbl.py dummy1.hex 1

Cool.

> I'll be glad to have feedback on it and will try to adjust the
> documentation if anything isn't clear.

Clear as freshly wiped glass. I keep debating to myself how important is
robustness and verification in the bootloading process. I'm been
working on Tato's bootloader on and off and here are some of the specs 
I've come up with:

- Using 'U' as the syn character for autobauding.

- Sending packets with checksums to allow for verification. Currently I
plan to implement the TCP checksum with the wrap around carry. I've also
looked at Fletchers and add/triple/add as other checksum techniques.

- Using the single pin half duplex scheme of Wouter's to allow for output
and verification.

- I was thinking of locating the entire bootloader in low memory. It seems
to me once the application cannot be transparent and must account for low
memory that the bootloader can occupy low memory.

- Finally I'm trying to figure out how to build a Trivial programmer that
runs from the serial port. Something along the lines of Tony Nixon's
ASCII programmer here:

http://www.piclist.com/techref/com/picnpoke/www/http/projects/prog.html

My first attempt (the Trivial BootStrap 555) is incomplete only because
I keep trying to get verification working. I've built and tested the
transmitter and it latches bits just fine. So it should be able to program
just fine. And now I have yet another fine Python program (along with
Wouter's ZPL loader in Python) to use to wiggle the bits.

Frank, this is a fine effort and very much apprciated. I have an intern
working on PIC bootloader stuff. I'm going to forward your stuff to him
and get him to test it out and adapt it for the 16F88, which is our chip
of choice. I'll let you know of any results that come from it.

Thanks again.

BAJ

Previous by date: 25 Jul 2006 15:05:23 +0100 [ANN] Pikme PIC Bootloader (for 16F819 etc), Frank Sergeant
Next by date: 25 Jul 2006 15:05:23 +0100 Re: [gnupic] [ANN] Pikme PIC Bootloader (for 16F819 etc), Tamas Rudnai
Previous in thread:
Next in thread: 25 Jul 2006 15:05:23 +0100 Re: [gnupic] [ANN] Pikme PIC Bootloader (for 16F819 etc), Tamas Rudnai


Powered by ezmlm-browse 0.20.