Writing SD Cards: Mac OS X
Apple provides a copy of dd with recent releases of OS X (at least since 10.7, probably earlier).
Finding the SD card descriptor:
- Insert the SD card
- In a terminal run diskutil list. Look for the SD card in the list of disks. On a MacBook with a singe hard drive, the output is:
#: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *500.1 GB disk0 1: EFI 209.7 MB disk0s1 2: Apple_HFS Macintosh HD 499.2 GB disk0s2 3: Apple_Boot Recovery HD 650.0 MB disk0s3 /dev/disk1 #: TYPE NAME SIZE IDENTIFIER 0: FDisk_partition_scheme *2.0 GB disk1 1: DOS_FAT_32 WARP SD 32.0 MB disk1s1
- In this example, the SD card device descriptor is /dev/disk1. The actual descriptor will differ on other machines with different disk configurations, but should take the form /dev/diskX.
Copying the .bin file:
- Unmount (not eject) the drive using this command (replacing X with your actual SD descriptor):
diskutil unmountDisk /dev/diskX
- Run this command, replacing the last three arguments with the correct values:
dd bs=512 seek=<N> if=<yourFile.bin> of=</dev/diskX>
- <N>: depends on the target slot number; use (131072 + slotNum*32768). More details here.
- <yourFile.bin>: the binary FPGA configuration file
- </dev/diskX>: device descriptor for the SD card
- If successful, dd should report the following (the time/throughput values will differ):
18032+1 records in 18032+1 records out 9232444 bytes transferred in 8.503631 secs (1085706 bytes/sec)
- Repeat for additional .bin config files in additional slots if needed.
- Eject the SD card in the Finder (if it's mounted).
Using a shell script to copy a .bin file to the SD card:
The following script automatically looks for the file descriptor of the SD card and copies the .bin file to the chosen slot. To execute the script:
- copy the script to a text file
- save it under the name copytosd.sh
- make it executable (chmod +x copytosd.sh)
- run it as root: sudo ./copytosd.sh.
#!/bin/sh # Author: Matthias Schulz <mschulz@seemoo.tu-darmstadt.de> # The author is not responsible for the consequences of use of this script # Check if at least two arguments are passed if [ $# -lt 2 ] then echo "Usage : ./copytosd.sh filename slot [description]" exit fi if [ $# -eq 3 ] then find "/Volumes/WARP SD" -name "`printf \"Slot %s - *\" \"$2\"`" -delete FILE="/Volumes/WARP SD/`printf \"Slot %s - %s\" \"$2\" \"$3\"`" echo "" > $FILE fi DISK=/dev/`diskutil list | grep "WARP SD" | cut -c 69-73` diskutil unmountDisk $DISK case "$2" in 0) dd bs=512 seek=131072 if=$1 of=$DISK ;; 1) dd bs=512 seek=163840 if=$1 of=$DISK ;; 2) dd bs=512 seek=196608 if=$1 of=$DISK ;; 3) dd bs=512 seek=229376 if=$1 of=$DISK ;; 4) dd bs=512 seek=262144 if=$1 of=$DISK ;; 5) dd bs=512 seek=294912 if=$1 of=$DISK ;; 6) dd bs=512 seek=327680 if=$1 of=$DISK ;; 7) dd bs=512 seek=360448 if=$1 of=$DISK ;; *) echo "Error: use a slot number between 0 and 7" exit ;; esac diskutil unmountDisk $DISK
Last modified 10 years ago
Last modified on Apr 21, 2014, 8:37:37 AM