New Toys!
Hello all,
Hope you’ve all been good. Been kinda busy with finals, but
yippee, I’m done! Hopefully, that is.
I recently stumbled upon the PSoC 4 CY8CKIT - 049 4xxx, which
is a $4 development board for Cypress PSoC hardware, specifically the PSoC 4
family (apparently there are PSoC 1, PSoc 3 and PSoc 5 families as well). If
you don’t know what a PSoC is, you can find out at Wikipedia. Trust me, their explanation is pretty good.
In a nutshell, I was intrigued by the notion of a device
like the PSoC, which, rather than relying on the traditional code-centric
approach we’ve all come to love/hate (as the case may be), relies on a drag and
drop style of development. At compile-time, the top-level design resulting from
all that dragging and dropping is converted into code for the PSoC core. The
interesting part is that the PSoC is really closer to a mash-up between a
microcontroller and an FPGA. Thus, it’s probably more accurate to say that the
top-level design is errm…synthesized into something the PSoC core (which is
actually built around an ARM Cortex M0 in the case of the PSoC 4) can
understand and run. These designs are based on blocks called components, and
there are soooo many components in the PSoC Creator (the IDE used for these
devices) catalog. Essentially, you drag a component into a design, configure
it, possibly connect it to other blocks and then build the design. You DO in
fact write code, but that’s mostly to glue the operation of the individual
components together. The drag and drop part is meant for configuration of the
individual hardware components (which can also be done in code, but hey, been
there done that right?) and their interconnections. And one major cool part of
this all is: there are also analog blocks! So its not just the digital stuff
we’re used to. More on this in a later post, I hope. I also read that the pins
on the PSoC 4 family (which the chip on this devkit belongs to) are really
flexible, and that you can route any function to any pin. While I haven’t
explored that personally (I just got the kit yesterday..or two days ago. can’t
remember) it would certainly be awesome if that’s true. Here’s an excerpt from
the PSoC Creator IDE start page:
“Unlike fixed function
microcontrollers, PSoC allows you to choose the on-chip peripherals you need.
Instead of settling for a part that has most of what you need and a lot of what
you don't, with PSoC you simply configure the device with your chosen
functionality. No more, no less.
And the configuration process
couldn't be easier. You choose peripherals from a catalog of pre-defined and
pre-tested components and simply drag them into your design schematic. The
components range from simple gates for glue logic, through complete
implementations of digital and analog peripheral functions, up to sophisticated
communications and applications solutions like USB and CapSense. Then choose
your clock frequencies, connect peripheral I/O to pins, and you're done. The
built-in configuration tools map your design into the device and calculate the
clock setup and routing automatically.
But this is not the complex
hardware configuration process you've seen before. All components are
parameterized so that the details of the implementation are abstracted away.
You set up components in terms that are natural to their function; such as the
baud rate for a UART, power and gain for an amplifier, or duty cycle of a PWM.
You are about to see that, like
no other platform available today, PSoC Creator and PSoC form a uniquely
flexible combination to design and build your own system-on-chip in less time
than it takes you to read the competitors' data sheets!”
And another:
“An embedded device is only as
good as the software controlling it. With those old-fashioned fixed function
microcontrollers, that software can be really difficult to get right. There is
assembler code that won't port to new architectures, memory maps that vary
between devices, and peripherals with complex and confusing register sets. PSoC
Creator avoids those problems by combining a C-based development flow with
automatically generated software APIs for the components in your design.”
And one more for the road:
“Our APIs make controlling your
on-chip peripherals simple and fast. They are consistently named so you soon get
used to using them and can often work with a new component without even opening
the datasheet to check the software interface. You don't need to learn esoteric
register names and write ugly macros to manipulate bit-fields. The APIs reduce
coding errors and ensure correct interaction with the peripheral so the whole
software development is faster, easier and less error prone.”
I’ve probably murked the waters of your understanding a bit…its
rather difficult to explain, so please see the Wikipedia page for more (and
clearer) information. My apologies.
Now, to the object of this blog post. If you’re like me and
cannot pass up really cheap devkits (I know I have a TI Launchpad around somewhere...)
then you’ll probably go ahead and buy this thing. Then, you’ll need to head
over to the product page and download either the 1GB ISO or one of the
600-700MB downloads. Personally, I downloaded PSoC Creator 3.0 SP2 by itself
(from the website, after some looking around), installed that, then got one of
the smaller (683MB) downloads (I really didn’t want the 1GB one) and then
installed that. That latter step is very important, as it contains certain
files needed to get up and running with this thing.
Next off, plug the thing into your computer. If you’ve run
the 683MB installer, you should now have drivers for the device. Got mine off
of Windows Update though, because I was online at the time. It should show up
as a regular USB Serial Port.
Apparently, the bootloader utility requires that the board
is assigned a COM port number below 10. Follow the steps in the user guide to
change the assigned port number if necessary.
You can now fire up PSoC Creator. You’re required to
register your Keil license (Keil are a company that make dev tools for embedded
hardware, and they provide some software used by PSoC Creator, I think. Anyway,
if you don’t register it, it stops working within 30 days so you really should
do it). To do that, open the Help menu at the top of the screen, and select the
Register sub-item. A submenu with “Keil…” and “PSoC Creator…” should appear.
Select Keil and follow the on-screen instructions. If you get an error about
not being to open some webpage, just open the link shown in the error dialog in
your favorite browser and follow the on-screen instructions. Bye bye baby.
Next, return to the user guide and skip read to the
section about programming the board with the bootloadable blinking LED code. I
had some trouble here, which is the true object of this post.
The user guide says to open the “SCB_Bootloader” workspace
(which you should have once you’ve run the installations described above), save
the workspace in a suitable folder, then set the Bootloadable blinking LED
project as the active project, build that and finally program the board using
the Bootloader utility accessible from the Tools menu. Well, I did that, and it
didn’t work. Specifically, in the output window, I got a message saying “The
command ‘cyelftool.exe’ failed with exit code ‘1’”.
Fast forward to half an hour later, and I seem to have solved
the problem. So here’s what I did:
1.
With the SCB_Bootloader workspace open in PSoC
Creator, right-click the ‘UART_Bootloader’ project, and select “Device
Selector”. A dialog appears with a list of devices. A massive list.
2.
Look closely at the chip on your particular
devkit. Mine came with a CY8C4245 XI-483 chip. Depending on the variant you
get/got, you could end up with the CY8C41** chip. If you ended up like me, with
the CY8C4245 XI-483 chip, select the CY8C4245AXI-483 option in the dialog. I
don’t know whether you need to do this for the CY8C41** chip, mostly because I
don’t have one.
3.
Once that’s done, right click the project again,
then select “Clean and Build UART_Bootloader”. That should complete without any
errors.
4.
Right-click the Bootloadable component in the
design, then select Configure. Click on the Dependencies tab, then point the
HEX and ELF files to the HEX and ELF files in the folder where you saved the
workspace. For example, if I saved my workspace in a folder called X, I should
have a folder called SCB_Bootloader within X. Within the SCB_Bootloader folder
should be a UART_Bootloader.cydsn folder. Within that, there should be a
CortexM0 folder. Within that, there should be an ARM_GCC_473 folder. Within
that, there should be a Debug folder. Within that, there should be a number of
files, including UART_Bootloader.hex and UART_Bootloader.elf. Thus, when you
are looking for the bootloader HEX and ELF files in the Dependencies tab, point
to these files and not the ones that came with the software installation. See
below for more information.
5.
Next, assuming you’ve set “Bootloadable Blinking
LED” as the Active project, right-click it and select the CY8C4245AXI-483
device via the Device Selector option as described in step 2. Next, right-click
on the project and select “Clean and Build Bootloadable Blinking LED”. That
should now complete without any errors as well. You should see something in the
output window about the Flash and SRAM memory used, both here and in step 3
above.
6.
Follow the rest of the user guide regarding
invoking the bootloader host program from the Tools menu, getting the chip into
bootloader mode and programming it.
Since I’m a bit freer these days, I definitely want to play
with this some more and see what I can do with it. I don’t know that the
instructions above will not lead to your computer or devkit exploding, so
please use these instructions at your own risk. I hope that if you do in fact
take the red pill (and follow the instructions regardless of my ominous
warning), that they’ll work for you. I understand why changing the device is
necessary, but I’m not sure why I needed to rebuild the UART_Bootloader HEX and
ELF files to get cyelftool.exe to stop giving that pesky error. Oh well, c’est
la vie.
If of course, you did not purchase one of these or do not
plan to, then the bulk of this post is useless to you. So, Hi J
Enjoy!
Comments
Post a Comment