123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359 |
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <style type="text/css">
- @import url('../css/main.css');
- </style>
- <title>Setup the BeagleBone Black as an SPI flashrom programmer</title>
- </head>
- <body>
- <div class="section">
- <h1 id="pagetop">Setup the BeagleBone Black as an SPI flashrom programmer</h1>
- <p>How to use the BBB as an external flashrom programmer, for reading/writing an SPI flash chip.</p>
- <p><a href="index.html">Back to previous index</a></p>
- </div>
- <div class="section">
- <h1 id="hardware_requirements">Hardware requirements</h1>
-
- <p>
- Shopping list (pictures of this hardware is shown later):
- </p>
- <ul>
- <li>
- External SPI programmer: <b>BeagleBone Black</b> (rev. C)
- is highly recommended. Sometimes referred to as 'BBB'.
- </li>
- <li>
- Clip for connecting to the flash chip: <b>Pomona 5250</b>
- (SOIC-8) or <b>Pomona 5252</b> (SOIC-16) is recommended
- (<b>X200S and X200 Tablet users will need a soldering iron
- instead</b>, because of the type of package the flash chip is
- in on those machines).
- </li>
- <li>
- <b>External 3.3V DC power supply</b>. The one used by this
- author has the label HF100W-SF-3.3 on it, but any decent
- supply will be fine. Some people use the 3.3V from an ATX
- PSU for instance (the kind that you get on a typical
- Intel/AMD desktop computer. 6A supply should be fine,
- the one used by this author is 20A (it won't actually use
- that, it's just what the PSU is capable of).
- </li>
- <li>
- Dupont <b>jumper cables</b> (2.54mm / 0.1" headers)
- You should get male-male, male-female and female-female
- cables in 10cm and 20cm sizes. Just get a load of them.
- </li>
- <li>
- <b>Mini USB A-B cable</b> (the BeagleBone probably already comes
- with one.)
- </li>
- <li>
- <b>FTDI serial board</b>, for unbricking the BeagleBone if
- necessary.
- </li>
- <li>
- <b>5V DC power supply</b> (from wall outlet to the BeagleBone).
- The BeagleBone can have power supplied via USB, but a
- dedicated power supply is recommended.
- </li>
- </ul>
-
- <p>
- <a href="#pagetop">Back to top of page.</a>
- </p>
-
- </div>
-
- <div class="section">
- <h1>Setting up the 3.3V DC PSU</h1>
- <p>
- With my PSU, first I had wire up the mains power cable. Any clover or kettle lead will do. Cut the end off (not the one
- that goes in the wall, but the kettle/clover connector).
- Strip the protection away by a decent length, then strip the wires inside so that a decent amount of
- copper is shown. Then wire up earth/live/neutral. This will vary according to what country you live in
- and/or the colour codes that your cable uses inside. <b>Make sure to get this right, as a botched job
- could result in extreme damage to you and your surroundings. Here's what mine looks like after wiring up
- the power cable: <a href="images/x200/psu_power.jpg">images/x200/psu_power.jpg</a> - also, make sure
- that the plug (for the wall) has the correct fuse. In my case I had a 240V wall socket, and the device
- says that it accepts 1.5A at that voltage, so I used the smallest fuse available (3A). For 110-120V the device
- says it needs 2.8A.</b> Also, if yours looks like in the image linked above, make sure to wrap electrical tape (lots)
- around it for safety. (otherwise, don't touch the terminals while the PSU is plugged in).
- </p>
- <p>
- Now take a red and black 20cm female-female jumper lead, and cut one of the ends off. Strip away the bare copper by about 1 or
- 1.5cm so you get this: <a href="images/x200/stripped_jumper_lead.jpg">images/x200/stripped_jumper_lead.jpg</a>.
- </p>
- <p>
- Black goes on -V, red goes on +V. In my case, I removed those screws from my PSU like this:
- <a href="images/x200/psu_screws_removed.jpg">images/x200/psu_screws_removed.jpg</a>. Then,
- </p>
- <p>
- Then I twisted the exposed copper on the jumper leads (so that they don't fray), and wrapped each to one of the
- screws each, around it near the head. I then screwed them in:
- <a href="images/x200/psu_jumper_leads.jpg">images/x200/psu_jumper_leads.jpg</a>.
- </p>
- <p>
- If you are using a different PSU, then the steps will change from those above. Anyway, once you are satisfied,
- continue reading...
- </p>
-
- </div>
-
- <div class="section">
-
- <h1>Setting up the BBB</h1>
- <p>
- Your BBB will have an sshd with no password on root. Find it's IP address
- (it will use DHCP by default) and set a root password. The steps below
- are done while SSH'd into a BBB.
- </p>
- <p>
- You can also use a serial FTDI debug board, with GNU Screen (example):<br/>
- # <b>screen /dev/ttyUSB0 115200</b><br/>
- <a href="images/x200/ftdi.jpg">images/x200/ftdi.jpg</a> and
- <a href="images/x200/ftdi_port.jpg">images/x200/ftdi_port.jpg</a>
- show an FTDI debug board in use. With screen you can then login as root, like you would using SSH.<br/>
- Using this, you can also see text output (from kernel, etc) when booting the machine.
- </p>
- <p>
- You can also simply connect the USB cable from the BBB to another computer and a new network interface will appear,
- with it's own IP address: this is the BBB. You can SSH into that. Or, you can (example):<br/>
- # <b>screen /dev/ttyACM0 115200</b>
- </p>
- <p>
- Since it's a bare board (no case) and you are also touching inside your X200, you should be earthed/grounded.
- <a href="images/x200/strap.jpg">images/x200/strap.jpg</a> shows how I earthed myself. This is to prevent you
- from causing any ESD damage. The surface that you place components on should also be earthed/grounded.
- (for this, I used a shielded ESD bag with a wire, copper exposed, attached from the bag to the exposed metal
- part on a radiator, which was earthed - not professional, but it should work. see <a href="images/x200/mat.jpg">images/x200/mat.jpg</a>).
- Most people ignore this advice and don't ground/earth themselves, at their own risk. You should also store the BBB
- in a shielded anti-static bag when you are finished with it.
- (the principles above apply to any computer components, since they are extremely sensitive te ESD).
- </p>
- <p>
- These instructions may or may not work for you. They are simply the steps that this author took.
- </p>
- <p>
- setting up SPIDEV on the BBB: <a href="http://elinux.org/BeagleBone_Black_Enable_SPIDEV#SPI0">http://elinux.org/BeagleBone_Black_Enable_SPIDEV#SPI0</a>
- - If you only setup SPI0, you don't have to disable the HDMI out. (you only need one).
- That guide is for seting up the device overlay for SPIDEV, last part is to make it persist across reboots.
- Needed to turn the BBB into an SPI flasher.
- </p>
- <p>
- Don't bother modifying uEnv.txt. it won't work;
- use the workaround here instead: <a href="http://elinux.org/Beagleboard:BeagleBoneBlack_Debian#Loading_custom_capes">http://elinux.org/Beagleboard:BeagleBoneBlack_Debian#Loading_custom_capes</a>.
- </p>
- <p>
- Follow the instructions at <a href="http://elinux.org/BeagleBone_Black_Enable_SPIDEV#SPI0">http://elinux.org/BeagleBone_Black_Enable_SPIDEV#SPI0</a>
- up to (and excluding) the point where it tells you to modify uEnv.txt
- </p>
- <p>
- You need to update the software on the BBB first. Before being able to use apt-get,
- I had to use the workaround defined <a href="https://groups.google.com/forum/?_escaped_fragment_=msg/beagleboard/LPjCn4LEY2I/alozBGsbTJMJ#!msg/beagleboard/LPjCn4LEY2I/alozBGsbTJMJ">here</a>:<br/>
- - Replace the contents of /etc/init.d/led_aging.sh with:
- </p>
- <pre>
- #!/bin/sh -e
- ### BEGIN INIT INFO
- # Provides: led_aging.sh
- # Required-Start: $local_fs
- # Required-Stop: $local_fs
- # Default-Start: 2 3 4 5
- # Default-Stop: 0 1 6
- # Short-Description: Start LED aging
- # Description: Starts LED aging (whatever that is)
- ### END INIT INFO
- x=$(/bin/ps -ef | /bin/grep "[l]ed_acc")
- if [ ! -n "$x" -a -x /usr/bin/led_acc ]; then
- /usr/bin/led_acc &
- fi
- </pre>
- </p>
- Run <b>apt-get update</b> and <b>apt-get upgrade</b> then reboot the BBB, before continuing.
- </p>
- <p>
- Run those commands:<br/>
- # <b>echo BB-SPI0-01 > /sys/devices/bone_capemgr.*/slots</b><br/>
- Then I did:<br/>
- # <b>ls -al /dev/spidev0.*</b><br/>
- <i>ls: cannot access /dev/spidev0.*: No such file or directory</i><br/>
- Then I rebooted and did:<br/>
- # <b>cat /sys/devices/bone_capemgr.*/slots</b><br/>
- Output:
- </p>
- <pre>
- 0: 54:PF---
- 1: 55:PF---
- 2: 56:PF---
- 3: 57:PF---
- 4: ff:P-O-L Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G
- 5: ff:P-O-L Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI
- </pre>
- <p>
- And then:<br/>
- # <b>ls /lib/firmware/BB-SPI0-01-00A0.*</b><br/>
- Output:
- </p>
- <pre>
- /lib/firmware/BB-SPI0-01-00A0.dtbo
- </pre>
- <p>
- Then:<br/>
- # <b>echo BB-SPI0-01 > /sys/devices/bone_capemgr.*/slots</b><br/>
- # <b>cat /sys/devices/bone_capemgr.*/slots</b><br/>
- Output:
- </p>
- <pre>
- 0: 54:PF---
- 1: 55:PF---
- 2: 56:PF---
- 3: 57:PF---
- 4: ff:P-O-L Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G
- 5: ff:P-O-L Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI
- 7: ff:P-O-L Override Board Name,00A0,Override Manuf,BB-SPI0-01
- </pre>
- <p>
- Then check if the device exists:<br/>
- # <b>ls -al /dev/spidev0.*</b><br/>
- Output:
- </p>
- <pre>
- ls: cannot access /dev/spidev0.*: No such file or directory
- </pre>
- <p>
- It didn't exist under that name, but I then did:<br/>
- # <b>ls -al /dev/spid*</b><br/>
- Output:
- </p>
- <pre>
- crw-rw---T 1 root spi 153, 0 Nov 19 21:07 /dev/spidev1.0
- </pre>
- <p>
- Now the BBB is ready to be used for flashing. Make this persist
- across reboots:<br/>
- In /etc/default/capemgr add <b>CAPE=BB-SPI0-01</b> at the end
- (or change the existing <b>CAPE=</b> entry to say that, if an
- entry already exists.
- </p>
- <p>
- Now you will download and build <b>flashrom</b> on the BBB.<br/>
- # <b>apt-get install libpci-dev pciutils zlib1g-dev libftdi-dev build-essential subversion</b><br/>
- # <b>svn co svn://flashrom.org/flashrom/trunk flashrom</b><br/>
- # <b>cd flashrom/</b><br/>
- # <b>make</b>
- </p>
-
- <p>
- Now test flashrom:<br/>
- # <b>./flashrom -p linux_spi:dev=/dev/spidev1.0,spispeed=512</b><br/>
- Output:
- </p>
- <pre>
- Calibrating delay loop... OK.
- No EEPROM/flash device found.
- Note: flashrom can never write if the flash chip isn't found automatically.
- </pre>
- <p>
- This means that it's working (the clip isn't connected to any flash chip,
- so the error is fine).
- </p>
-
- </div>
-
- <div class="section">
-
- <h1>
- Connecting the Pomona 5250/5252
- </h1>
- <p>
- Use this image for reference when connecting the pomona to the BBB:
- <a href="http://beagleboard.org/Support/bone101#headers">http://beagleboard.org/Support/bone101#headers</a>
- (D0 = MISO or connects to MISO).
- </p>
-
- <p>
- The following shows how to connect clip to the BBB (on the P9 header), for SOIC-16 (clip: Pomona 5252):
- </p>
- <pre>
- NC - - 21
- 1 - - 17
- NC - - NC
- NC - - NC
- NC - - NC
- NC - - NC
- 18 - - 3.3V PSU RED
- 22 - - NC - this is pin 1 on the flash chip
- <i>This is how you will connect. Numbers refer to pin numbers on the BBB, on the plugs near the DC jack.</i>
- </pre>
- <p>
- The following shows how to connect clip to the BBB (on the P9 header), for SOIC-8 (clip: Pomona 5250):
- </p>
- <pre>
- 18 - - 1
- 22 - - NC
- NC - - 21
- 3.3V PSU RED - - 17 - this is pin 1 on the flash chip
- <i>This is how you will connect. Numbers refer to pin numbers on the BBB, on the plugs near the DC jack.</i>
- </pre>
- <p>
- <b>NC = no connection</b>
- </p>
- <p>
- <b><u>DO NOT</u> connect 3.3V PSU RED yet. ONLY connect this once the pomona is connected to the flash chip.</b>
- </p>
- <p>
- <b>You also need to connect the BLACK wire from the 3.3V PSU to pin 2 on the BBB (P9 header). It is safe to install this now
- (that is, before you connect the pomona to the flash chip).</b>
- </p>
- <p>
- if you need to extend the 3.3v psu leads, just use the same colour M-F leads, <b>but</b> keep all other
- leads short (10cm or less)
- </p>
-
- <p>
- <a href="images/x200/5252_bbb0.jpg">images/x200/5252_bbb0.jpg</a> and
- <a href="images/x200/5252_bbb1.jpg">images/x200/5252_bbb1.jpg</a> shows a properly wired up BBB with Pomona
- 5252 before being connected to the flash chip on the X200.
- </p>
-
- <p>
- That's basically it. Now refer back to the documentation for how to use this on your board.
- </p>
-
- <p>
- <a href="#pagetop">Back to top of page.</a>
- </p>
-
- </div>
- <div class="section">
- <p>
- Copyright © 2014, 2015 Francis Rowe <info@gluglug.org.uk><br/>
- This document is released under the Creative Commons Attribution-ShareAlike 4.0 International Public License and all future versions.
- A copy of the license can be found at <a href="../license.txt">../license.txt</a>.
- </p>
- <p>
- This document is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See <a href="../license.txt">../license.txt</a> for more information.
- </p>
-
- </div>
- </body>
- </html>
|