Happy Halloween to you ghouls and goblins from the latest, coolest Kickstarter, called tweeq, a micro-sized, Arduino-compatible platform based on chipKIT! At smaller than an M&M, most of these boards fit on the tip of your finger, and yet there is so much potential to make great things with them! Why not give them a gander and give ‘em a quid or two; they have various pledge quantities, but hurry! There’s only one month left to show your support!
So you have a chipKIT Pi, which you have dutifully attached to a Raspberry Pi, and you’d like to deploy it “in the field” (with the cows). That’s fair enough. What you’d like to be able to do, though, is upgrade the firmware on the chipKIT Pi without having to go into the field (those cows are scary, man!).
So how would you do that? You can’t program the chipKIT Pi without pressing the RESET and BOOTLOAD-EN buttons (and you’re not about to train cows to do that for you), so what are your options?
Well, UECIDE has the answer for you.
First you will need to modify your chipKIT Pi. Don’t worry, it’s only a simple small modification. Basically you need to connect the BOOTLOAD-EN signal to one of the GPIO pins on the Raspberry Pi header.
Connect pin 8 of the chipKIT Pi pass-through header (GPIO17 on the Raspberry Pi) to the nearest pin of JP6 with a piece of fine wire. I use 30AWG wire-wrapping wire. This will allow the Raspberry Pi to trigger the bootloader automatically (hopefully future versions of the chipKIT Pi will have this modification in place already).
Now you can enter programming mode from the Raspberry Pi by setting GPIO 17 to an output and driving it LOW, then setting GPIO 4 to an output and driving that low too (it is connected to RESET), then releasing both the GPIO lines in reverse order. It’s good to put a short delay between releasing GPIO 4 and GPIO 17.
To make things even easier we have a chipKIT Pi support package in our Debian repository. Add the repository to your /etc/apt/sources.list file:
$ sudo nano /etc/apt/sources.list
Add the line:
deb http://dist.majenko.co.uk/ wheezy main contrib
You can also add our signing key so it doesn’t ask if you want to install unauthorized packages:
$ wget -O - http://dist.majenko.co.uk/autobuild.key | sudo apt-key add -The package is called “ckpi-support” and it sets up all you will need in order to program the chipKIT Pi remotely from UECIDE. It will:
- Install avrdude
- Install avahi-daemon
- Configure a “ckpi” user
- Install scripts for controlling the chipKIT Pi:
- ckpi-reboot (reboots the chipKIT Pi)
- ckpi-program (reboots the chipKIT Pi and triggers the bootloader)
- Install an mDNS service so UECIDE can find the board on the network
So go ahead and install the package now:
$ sudo apt-get update $ sudo apt-get install ckpi-support
If all goes well it will have asked you for a new password to give to the “ckpi” user. Remember this, as you will want it again later.
One more small modification you will need to make (if you haven’t done it in the past) is to disable the “getty” process on /dev/ttyAMA0 (the serial port). Edit the file /etc/inittab
$ sudo nano /etc/inittab
and look for the line:
T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
It is most probably right at the end of the file. Comment the line out by placing a # at the start of it and save the file out. You can now either reboot to enable the change, or trigger a reload of the file:
$ sudo kill -HUP 1
Now you’re good to go!
You’ll need the latest beta version of UECIDE as it has the networking support you’ll be using, so if you aren’t already running it then go ahead and download it. This is the version for your PC of course, not for the Pi. You don’t need it on the Pi.
Load UECIDE up, ensure the chipKIT Pi board is installed (and the latest version), and after a few moments it should detect the Raspberry Pi for you:
You should now be able to select the board from the “Discovered Boards” menu:
And there should now be a suitable entry in the “Programmers” menu:
Now you can just compile and upload your sketch as if you were directly connected to the chipKIT Pi. The first time you upload it will ask you for the password for the “ckpi” user – the password you entered when installing the support package. If you want you can tell UECIDE to save the password forever (it puts it in your preferences.txt file), but even if you don’t do that it will still remember it for the rest of your session so you won’t need to re-enter it again until you next load UECIDE.
Share and Enjoy
A few professionals have published a research paper “A novel concept for configuring online laboratories” with the use of PIC kit in the Experiment International Conference. (See below abstract)
They are interested in doing this with chipKIT in the future. Abstract—Embedded online laboratories are becoming frequent nowadays, because they can include both the functionality of a data acquisition device and the functionality of a webserver and this, in turn, results in lower implementation costs. However, while it is easy to configure a laboratory server which is located on a computer, the local configuration and control of an embedded laboratory is more challenging, because of the lack of interactive peripherals (such as the keyboard is to a computer). This paper introduces a novel concept which allows administrators to easily achieve the local configuration of the embedded (on-chip) laboratory parameters (including network settings) by using a mobile device.
Reference: B.Deaky, T. F. Andrade, L. Parv, “A novel concept for configuring online laboratories”, in Proceedings of the 2nd Experiment@ International Conference — Online Experimentation (exp.at’13), Coimbra, Portugal, September 18-20, 2013, pp. 79 – 82.
Share and Enjoy
Running on Microchip Starter Kits
- PIC32 Starter Kit
- PIC32 USB Starter Kit
- PIC32 Ethernet Starter Kit
- Explorer 16 Starter Kit
Using other PIC32 boardsAs far as using MPIDE with other boards, the answer is YES, it should work with ANY PIC32 there is. The only limit might be it won’t work on chips smaller than 32K, And that’s because it hasn’t been tried on anything smaller. To get it to work on other boards, a few things have be be done.
- First, the bootloader has to be burned onto the target board. The source is on github and MPLAB is used to compile and burn the bootloader. The multi-platform MPLAB-X was used on a Mac, but other versions should work as well.
- If you using a chip that has not already been added to avrdude.conf, that has to be done.
- You need to add a new entry to boards.txt and then you will be able to program the board directly from MPIDE.
Share and Enjoy
Arduino-32MX795F512L>V show interrupt Vectors FLASH_PROG_BASE=9D000000 EBASE =9D000000 IntCtl =00000020 VectorSpacing =00000001 +++ 0= 02 00---0B4017F0 jump 9D005FC0 _CORE_TIMER_VECTOR +++ 1= 00 00---FFFFFFFF unused _CORE_SOFTWARE_0_VECTOR +++ 2= 00 00---FFFFFFFF unused _CORE_SOFTWARE_1_VECTOR +++ 3= 00 00---FFFFFFFF unused _EXTERNAL_0_VECTOR +++ 4= 00 00---0B401E5A jump 9D007968 _TIMER_1_VECTOR +++ 5= 00 00---FFFFFFFF unused _INPUT_CAPTURE_1_VECTOR +++ 6= 00 00---FFFFFFFF unused _OUTPUT_COMPARE_1_VECTOR +++ 7= 00 00---FFFFFFFF unused _EXTERNAL_1_VECTOR +++ 8= 00 00---FFFFFFFF unused _TIMER_2_VECTOR +++ 9= 00 00---FFFFFFFF unused _INPUT_CAPTURE_2_VECTOR +++10= 00 00---FFFFFFFF unused _OUTPUT_COMPARE_2_VECTOR +++11= 00 00---FFFFFFFF unused _EXTERNAL_2_VECTOR +++12= 00 00---FFFFFFFF unused _TIMER_3_VECTOR +++13= 00 00---FFFFFFFF unused _INPUT_CAPTURE_3_VECTOR +++14= 00 00---FFFFFFFF unused _OUTPUT_COMPARE_3_VECTOR +++15= 00 00---FFFFFFFF unused _EXTERNAL_3_VECTOR +++16= 00 00---FFFFFFFF unused _TIMER_4_VECTOR +++17= 00 00---FFFFFFFF unused _INPUT_CAPTURE_4_VECTOR +++18= 00 00---FFFFFFFF unused _OUTPUT_COMPARE_4_VECTOR +++19= 00 00---FFFFFFFF unused _EXTERNAL_4_VECTOR +++20= 00 00---FFFFFFFF unused _TIMER_5_VECTOR +++21= 00 00---FFFFFFFF unused _INPUT_CAPTURE_5_VECTOR +++22= 00 00---FFFFFFFF unused _OUTPUT_COMPARE_5_VECTOR +++23= 00 00---FFFFFFFF unused _SPI_1_VECTOR +++24= 00 00---0B401B67 jump 9D006D9C _I2C_3_VECTOR _UART_1A_VECTOR _UART_1_VECTOR _SPI_1A_VECTOR _I2C_1A_VECTOR _SPI_3_VECTOR +++25= 01 00---FFFFFFFF unused _I2C_1_VECTOR +++26= 00 00---FFFFFFFF unused _CHANGE_NOTICE_VECTOR +++27= 01 00---FFFFFFFF unused _ADC_VECTOR +++28= 00 00---FFFFFFFF unused _PMP_VECTOR +++29= 00 00---FFFFFFFF unused _COMPARATOR_1_VECTOR +++30= 00 00---FFFFFFFF unused _COMPARATOR_2_VECTOR +++31= 00 00---0B401BDD jump 9D006F74 _UART_2A_VECTOR _I2C_2A_VECTOR _SPI_2_VECTOR _SPI_2A_VECTOR _I2C_4_VECTOR _UART_3_VECTOR +++32= 00 00---0B401C53 jump 9D00714C _UART_2_VECTOR _SPI_3A_VECTOR _I2C_3A_VECTOR _UART_3A_VECTOR _SPI_4_VECTOR _I2C_5_VECTOR +++33= 00 00---FFFFFFFF unused _I2C_2_VECTOR +++34= 00 00---FFFFFFFF unused _FAIL_SAFE_MONITOR_VECTOR +++35= 01 00---FFFFFFFF unused _RTCC_VECTOR ===36= 00 00---FFFFFFFF unused _DMA_0_VECTOR ===37= 00 00---FFFFFFFF unused _DMA_1_VECTOR ===38= 00 00---FFFFFFFF unused _DMA_2_VECTOR ===39= 00 00---FFFFFFFF unused _DMA_3_VECTOR ===40= 00 00---FFFFFFFF unused _DMA_4_VECTOR ===41= 00 00---FFFFFFFF unused _DMA_5_VECTOR ===42= 00 00---FFFFFFFF unused _DMA_6_VECTOR ===43= 00 00---FFFFFFFF unused _DMA_7_VECTOR ===44= 00 00---FFFFFFFF unused _FCE_VECTOR ===45= 00 00---FFFFFFFF unused _USB_1_VECTOR ===46= 00 00---FFFFFFFF unused _CAN_1_VECTOR ===47= 00 00---FFFFFFFF unused _CAN_2_VECTOR ===48= 00 00---FFFFFFFF unused _ETH_VECTOR ===49= 00 00---0B401BA2 jump 9D006E88 _UART_4_VECTOR _UART_1B_VECTOR ===50= 00 00---0B401C18 jump 9D007060 _UART_6_VECTOR _UART_2B_VECTOR ===51= 00 00---0B401C8E jump 9D007238 _UART_5_VECTOR _UART_3B_VECTOR