Sunday, February 26, 2012

Stellaris MCU board

Here's a board I designed for use with Stellaris 32-bit ARM Cortex-M3 MCUs from Texas Instruments.
It's meant to be used with either LM3S3748 (USB device/host) or LM3S6938 (Ethernet), but it will probably work with other models as well, because most of them have similar pinouts.
 The design is based on the schematics of evaluation boards for  LM3S3748 and LM3S6965.

My board with LM3S6938 (left) and LM3S748.
I've had it manufactured by iTead studio and I'm very satisfied with the result.
The boards were manufactured in 3 days, and shipping via airmail took less than two weeks.
There are some stories about how they mess up boards sometimes, but I don't see any problems with mine, even though I used thin 8 mil traces.

Here is a scan of both sides of the board.

Here is the board in Eagle CAD format:
The zip file also contains the schematics of an add-on board required for attaching an ethernet socket to the board.


  1. Hi, I'm trying to program a custom board with a LM3S5732 but I can't upload any program. How are you programming the MCU? Are you using using JTAG or serial programmer?

    1. I'm using JTAG.
      The serial bootloader that comes preprogrammed worked for me, but it overwrites itself when you upload your first program.
      I've also tried the USB DFU bootloader, but it constantly stays in bootloader mode instead of running the application.

    2. What programmer are you using?

    3. I'm using an official Stellaris eval board as a programmer (it has an FT2232 chip for USB/JTAG).

      But you can use OpenOCD to program the MCU, so any JTAG adapter should work.

  2. Cool things you have got here! :)

    I am using an LM3S608. I have managed to setup openocd for JTAG programming using another stellaris evaluation board. Is it possible to burn the bootloader only once via the JTAG and then use the serial interface for flashing the application code (bootloader code shouldn't be affected) ? How can this be done ?

    1. I'm no expert on Stellaris MCUs, but from what I understand there is no easy way of doing it.

      You can either incorporate the bootloader into your projects, or you can modify the bootloader to write the program to some other flash address than 0x0, but then you have to modify all of your projects to start at that address.

  3. i have a ARM stellaris LM3S3748 but have no way to test it and use it because i have no board.
    could you confirm to me that this PCB design works for sure?
    there are loads of my friends waiting to have a breakout board.

    I jurst want to use the LM3S3748 for a real application. I jurst have no way to solder it so im planning to get this PCB manufactured. Etching tiny lines is hard to do and didnt work for ARM.

    so if any one can tell me who has done an application using this breakout board would be gratfull.

    1. I can assure you this design works, I wouldn't have posted it otherwise :)
      I'm currently using it in a project requiring USB, SPI and ADC peripherals, and so far everything seems to be working.
      There are some things I would do differently now that I have some experience with this board and Stellaris chips in general, but it works as it is.

      Just remember that not all of the pins are brought out on this board (because of size constraints), take a look at the schematics.

      Also, remember that if you want to use LM3S3748, you don't have to populate elements Q2, C11, C12, R3 and R4.
      Those are needed only for Ethernet.

  4. How about LM3S2918? Does it work on that too?

    1. A quick look at the schematics of the evaluation kit for LM3S2965 suggests that it should work, but the board doesn't bring out Port D pins, so you wouldn't be able to use CAN.

  5. Hi, nice work, it looks very good. I'm trying to make a board for a LM3S6965. But I have some doubts about the Jtag config. Which pins do you use in your board and in your stellaris eval to program. You use the CodeComposer to burn?

    sorry if I wrote something wrong. I'm learning english. thanks

    1. To use JTAG on LM3S6965 you have to pull the TRST line low.
      For programming I use LM Flash Programmer or OpenOCD and both work fine.
      I use all the JTAG pins (TCK,TMS,TDO,TDI, and TRST).

    2. So, I need just put the Jtag pins of stellaris on c0, c1, c2, c3 pins of the MCU? And how you put the trst low? do you use a simple jump and burn normally?

      Sorry by the fool questions, but I never used Jtag before and I want to learn. In the lm3s6965 evaluation board manual I read:

      "ICDI does not control RST(device reset) or TRST(test reset) signals. Both reset functions are implemented as commands over JTAG/SWD, so these signals are not necessary."

      and this make me confuse about the jtag line trst. I think with what I asked now, I will be able to understand or know what to search better, of course if you can answer. Thanks for the first answer, it was a big help.

    3. It looks like I was mistaken, you have to pull the TRST line *high* for JTAG to work.
      This is actually a bug in the silicon, check the LM3S6965 errata.

      By the way I suggest you check out the official Texas Instruments forum -