top of page

What's a good embedded system platform to learn firmware development on your own?

Updated: Jan 12, 2020


ree

Although I currently work as a Firmware Engineer, I wasn't really into Firmware at the beginning of my career. I did my undergrad in Electrical Engineering so I was more into ASIC design. But as I started working in the industry, I picked up Firmware design and I absolutely loved it! The fact that I dove into Firmware Engineering (or as many of you might say it as "Embedded Systems") with no previous academic background, I frequently get asked what's a good platform to learn embedded systems for someone who doesn't really have too much exposure into embedded systems. Actually I tried looking it up online and I see mostly 2 answers: Arduino, RaspBerryPi/BeagleBone. While it's true that both has functionalities like I2C, SPI, UART peripherals, LEDs, etc. but still in my opinion, they are not exactly what you are looking for. First of all Arduino shouldn't even be in that list. If you are a complete newbie into coding and want to get started on a platform then sure, Arduino works for you. But it will take you nowhere close to professional Embedded Systems engineering, it's more like for hobbyists. RaspBerry Pi and BeagleBone are great platforms, but they catered to a very specific cause. If you want to learn kernel, Linux, etc. or want to do fancy things like networking stack, image recognition using Computer Vision (CV), etc. then by all means pick a Raspberry Pi or BeagleBone and work towards it. But again, that won't take you to the basics of Embedded Systems. Like I don't think you will learn too much of the basics of RTOS, ARM architecture, etc. But don't get me wrong, I still see much value in learning from RaspBerry Pi or a BeagleBone but maybe after you get the hang of the very low level fundamentals of Embedded Systems.


So what do I suggest? Having finished my grad school at San Jose State University recently, I came across two fantastic embedded system boards which I think are great from someone who wants to pick up on learning Embedded Systems. I have shared below two specific boards that are cheap and very easy to get started with. Now before you dive in below, note that these are the boards that I have come across in the recent years. Is there any other boards out there that are better suited for the job? Maybe yeah, maybe no, I don't know. But I am just sharing the ones that helped me the most and I am very sure that it will help you tremendously too.



LPC1769 evaluation board from NXP



ree


I came across this evaluation board from NXP during an embedded wireless class that I took at San Jose State University. This board has an ARM Cortex M3 32 bit processor, which in my opinion is a great chip for using as a stepping stone to learn embedded system. Some other feature of this board is it has 512KB non volatile flash memory, 64KB SRAM, Ethernet, USB and other general peripherals like I2C/I2S, SPI/SSI, CAN, PWM, UART/USART, USB OTG, GPIO, etc.


Pros:

1. It's a fairly light weight board and comes with an on-board debugger.

2. The IDE comes from NXP for free (just that you have to register for free to download the app) which is based on the popular Eclipse platform. The IDE works on Windows, Mac and Ubuntu!

3. The code is pretty much plug and play and very straight forward

4. Board can be ordered online from anywhere in the world


Cons:

1. The board is shipped *WITHOUT* any headers connected to it. So if you are planning to use things like GPIO, then you would have to solder them which requires additional equipment

2. Although the FreeRTOS library is given to you in the software package but you pretty much don't have any other reference code or guide to learn from. Therefore I highly suggest following this FreeRTOS PDF: https://www.freertos.org/Documentation/161204_Mastering_the_FreeRTOS_Real_Time_Kernel-A_Hands-On_Tutorial_Guide.pdf


So here's a bunch of link and important info on the LPC1769 board:

1. You can buy it from Digikey (PN: OM13085UL): DigiKey link

2. IDE from NXP: MCUExpresso link

4. Schematic of the board: LPC1769 Board schematic

5. Data sheet of the chip: LCP1769 Datasheet


Keep the source code zipped. Just import it directly from the within the MCUExprosso app. Once imported, build the "freertos_blinky" app. After build finishes successfully, burn the code into the board (by now you should have connected the board through a Micro USB cable). Select "Debug As" and pick the MCU Expresso link tab, that should burn the code to the board.


The cost of the board is $26.56 from Digikey and you need a micro USB cable to connect the board to your PC. This is absolutely a great board if you are focusing only on RTOS as it doesn't need anything else other than the things mentioned above. Well, sure you can also use it for learning driver development but then you would need to solder some pins and also need to get some external peripherals for the driver to talk to. For example, if you are doing driver development for SPI, then you would want to solder the required PINs for the SPI module on the board and then you would have to get a separate SPI chip (like a SPI flash maybe?) which you could use to talk to each other. Uh, that brings us to our next board...


SJSU One Board



ree


I came across the SJSU One board when I was taking two embedded systems class at SJSU. This board is actually made in house at SJSU lead by the one and only Preet Kang (I have a lot to say about him and the classes but I will keep it for a separate blog :) ).


Pros:

1. The board comes application ready! Meaning all the header pins are in place, the push buttons, the LEDs, the gyro, the seven segment LED, whatever you can think of is already mounted on the board. The good thing about this is that if you are doing driver development for let's say SPI, you can just talk to the on-board SPI flash. No need to hook up anything else.

2. If you are thinking about using the board to build a project or something, this is the board that you want. Like I mentioned above, most of the components that you might be using are already in there ready to be used. Look for a link below where students (including me :D ) used the board to make some cool projects.

3. The software package comes with all the drivers ready. Meaning either you can choose to use the already available drivers, or you can write them from scratch for the sake of learning driver development.

4. There's a lot of debate in the industry regarding the use of C++ in firmware. While I don't consider myself knowledgeable enough to cast any opinion on that, but its true that in my limited experience, all the firmwares that I have worked on, used RTOSes like ThreadX, MQS, FreeRTOS or even baremetal were all C only. When I was working in autonomous industry, we used QNX RTOS and that's the only place I used C++ to write Firmware but then again QNX is a bit of a different animal all together. Anyway, the reason I am mentioning it here is because the software package that is available is in C++. Well if you don't know C++ that's perfectly fine, you can still write C type code but I am just saying that there's good opportunity to practice C++ using this board.

5. The final cool part, there's a website where you can get a lot of help! Remember how I was saying this board is used in class? So Preet did a great job in making a wiki type website where you can find a lot of "how to" stuff on the software package and also past projects that students did using this board. Look for the link down below.


Cons:

1. Doesn't have a JTAG. Well I mean there's JTAG pins exposed on the board but I have never seen anyone connecting a JTAG on it. Well, maybe someone can buy a Segger JTAG debugger and work to get them working :)

2. Its been a while since I used the board but back then, the applications were only available for Windows. Well technically speaking, theoretically it should work on Mac/Ubuntu too because I think all you need is just the cross compilers, maybe there's some dependency there which I don't know. Oh, the Firmware doesn't need a specific IDE, you can just use something like Sublime Text or VS Code and use the terminal to compile the code.

3. There are some extra application that you need to use. For example Hercules application to talk over the UART (wait, but any serial terminal application should work right?) and Hyperload application as a psudo-bootloader to load the binary firmware.

4. The board is not available for buying in the market. But you can reach out to SCE SJSU and then can get you one of these boards. That being said, I am not sure if they are ok with shipping it across US. Well, if you are in the SF Bay Area, then I am pretty sure you can scoop by SJSU and get a board from them.


So here's a bunch of link and important info on the SJ One board:


1. Wiki on the SJ One board Software: http://socialledge.com/sjsu/index.php/SJ_One_Board

4. Wiki on how to get the compiler and stuff working on Windows platform: http://socialledge.com/sjsu/index.php/Development_Package

5. Wiki in how get the software to work on Mac: http://socialledge.com/sjsu/index.php/MINGW_Development_Package(MAC_OS)

PS: This Mac stuff seems to be new, I am pretty sure it works, but I have never tried it before

6. Small to mid scale projects done using the SJ One board: http://socialledge.com/sjsu/index.php/Realtime_OS_on_Embedded_Systems

7. Large scale project i.e building an autonomous car done using the SJ One board: http://socialledge.com/sjsu/index.php/Industrial_Application_using_CAN_Bus

8. Course material from the class that you can follow: http://books.socialledge.com/


I heard that apparently there's a newer version of the board is available and also a new SF package is being worked on which improves on the cons mentioned above!


During my time at SJSU we created an autonomous car using the SJ One board, check out the video below. Interesting coincidence is that in that project I was working with four other students who were all from Tesla along with Preet who was the instructor and he was from Tesla too at that time ;) .






I honestly don't think there's much of a difference in between these two boards but at the end what it boils down to is the what you are looking for to learn and how. I think in my opinion, if you are only looking to learn FreeRTOS then LPC1769 eval board will suffice but if you ready to swim in the deep ends and probably jump into doing some side projects then the SJ One board is the way to go. Both the boards are fantastic and if used properly can be a phenomenal tool to learn embedded systems.



Comments


Contact

  • Black Instagram Icon
  • LinkedIn Social Icon

© 2023 by Personal Life Coach. Proudly created with Wix.com

Thanks for submitting!

bottom of page