Skip to content

Instantly share code, notes, and snippets.

@trygvis
Created December 23, 2011 22:21
Show Gist options
  • Save trygvis/1515531 to your computer and use it in GitHub Desktop.
Save trygvis/1515531 to your computer and use it in GitHub Desktop.
ENC28J60 SPI packet analyzer written i bash
#!/bin/bash
first=1
# Skip the first line
read junk
export IFS=","
last_id=abc
bank=0
while getopts ":b:" opt
do
case $opt in
b)
bank=$OPTARG
;;
*)
echo "Invalid option: -$OPTARG" >&2
;;
esac
done
while read time id mosi miso
do
if [ -z "$id" ]
then
continue
fi
mosi=`echo $mosi | sed "s,^0b \(....\) *\(....\)$,\1\2,"`
miso=`echo $miso | sed "s,^0b \(....\) *\(....\)$,\1\2,"`
if [ "$id" != "$last_id" ]
then
echo
echo -n "#$id: "
reg=`echo $mosi | cut -c 4-8`
reg_dec=`concalc -m base -b dec bin$reg 2>/dev/null`
reg_hex=`concalc -m base -b hex bin$reg 2>/dev/null`
echo mosi=$mosi, opcode=`echo $mosi | cut -c 1-3`
# set -x
name=`sed -n \
-e "s, *\([A-Z0-9]*\).*= 0x${bank} + 0x0$reg_hex.*$,\1,p" \
-e "s, *\([A-Z0-9]*\).*= 0x${bank} + 0x$reg_hex.*$,\1,p" \
$0`
set +x
case $mosi in
000*)
echo "read control"
echo "Register: $reg, $reg_dec, $reg_hex, name=$name (bank=0x${bank}0)"
;;
00111010) echo "read buffer memory" ;;
010*)
echo "write control"
echo "Register: $reg, $reg_dec, $reg_hex, name=$name (bank=0x${bank}0)"
if [ $reg_hex = 1F ]
then
# set -x
read_bank=1
fi
;;
00111010) echo "write buffer memory" ;;
100*)
echo "bit field set"
echo "Register: $reg, $reg_dec, $reg_hex, name=$name (bank=0x${bank}0)"
;;
101*)
echo "bit field clear"
echo "Register: $reg, $reg_dec, $reg_hex, name=$name (bank=0x${bank}0)"
;;
11111111)
echo "reset"
;;
*) echo "UNKNOWN" ;;
esac
else
echo "Data: out=$mosi in=$miso"
if [ "$read_bank" = 1 ]
then
# set -x
bank=`concalc -m base -b hex "bin${mosi}00 & bin1100" 2>/dev/null`
set +x
read_bank=0
fi
fi
last_id=$id
done
echo ""
echo "Current bank: $bank"
exit 0
ERDPTL = 0x0 + 0x00
EHT0 = 0x4 + 0x00
MACON1 = 0x8 + 0x00
MAADR5 = 0xC + 0x00
ERDPTH = 0x0 + 0x01
EHT1 = 0x4 + 0x01
MAADR6 = 0xC + 0x01
EWRPTL = 0x0 + 0x02
EHT2 = 0x4 + 0x02
MACON3 = 0x8 + 0x02
MAADR3 = 0xC + 0x02
EWRPTH = 0x0 + 0x03
EHT3 = 0x4 + 0x03
MACON4 = 0x8 + 0x03
MAADR4 = 0xC + 0x03
ETXSTL = 0x0 + 0x04
EHT4 = 0x4 + 0x04
MABBIPG = 0x8 + 0x04
MAADR1 = 0xC + 0x04
ETXSTH = 0x0 + 0x05
EHT5 = 0x4 + 0x05
MAADR2 = 0xC + 0x05
ETXNDL = 0x0 + 0x06
EHT6 = 0x4 + 0x06
MAIPGL = 0x8 + 0x06
EBSTSD = 0xC + 0x06
ETXNDH = 0x0 + 0x07
EHT7 = 0x4 + 0x07
MAIPGH = 0x8 + 0x07
EBSTCON = 0xC + 0x07
ERXSTL = 0x0 + 0x08
EPMM0 = 0x4 + 0x08
MACLCON1 = 0x8 + 0x08
EBSTCSL = 0xC + 0x08
ERXSTH = 0x0 + 0x09
EPMM1 = 0x4 + 0x09
MACLCON2 = 0x8 + 0x09
EBSTCSH = 0xC + 0x09
ERXNDL = 0x0 + 0x0A
EPMM2 = 0x4 + 0x0A
MAMXFLL = 0x8 + 0x0A
MISTAT = 0xC + 0x0A
ERXNDH = 0x0 + 0x0B
EPMM3 = 0x4 + 0x0B
MAMXFLH = 0x8 + 0x0B
ERXRDPTL = 0x0 + 0x0C
EPMM4 = 0x4 + 0x0C
ERXRDPTH = 0x0 + 0x0D
EPMM5 = 0x4 + 0x0D
ERXWRPTL = 0x0 + 0x0E
EPMM6 = 0x4 + 0x0E
ERXWRPTH = 0x0 + 0x0F
EPMM7 = 0x4 + 0x0F
EDMASTL = 0x0 + 0x10
EPMCSL = 0x4 + 0x10
EDMASTH = 0x0 + 0x11
EPMCSH = 0x4 + 0x11
EDMANDL = 0x0 + 0x12
MICMD = 0x8 + 0x12
EREVID = 0xC + 0x12
EDMANDH = 0x4 + 0x13
EDMADSTL = 0x0 + 0x14
EPMOL = 0x4 + 0x14
MIREGADR = 0x8 + 0x14
EDMADSTH = 0x0 + 0x15
EPMOH = 0x4 + 0x15
ECOCON = 0xC + 0x15
EDMACSL = 0x0 + 0x16
MIWRL = 0x8 + 0x16
EDMACSH = 0x0 + 0x17
MIWRH = 0x8 + 0x17
EFLOCON = 0xC + 0x17
ERXFCON = 0x4 + 0x18
MIRDL = 0x8 + 0x18
EPAUSL = 0xC + 0x18
EPKTCNT = 0x4 + 0x19
MIRDH = 0x8 + 0x19
EPAUSH = 0xC + 0x19
EIE = 0x0 + 0x1B
EIR = 0x0 + 0x1C
ESTAT = 0x0 + 0x1D
ECON2 = 0x0 + 0x1E
ECON1 = 0x0 + 0x1F
EIE = 0x4 + 0x1B
EIR = 0x4 + 0x1C
ESTAT = 0x4 + 0x1D
ECON2 = 0x4 + 0x1E
ECON1 = 0x4 + 0x1F
EIE = 0x8 + 0x1B
EIR = 0x8 + 0x1C
ESTAT = 0x8 + 0x1D
ECON2 = 0x8 + 0x1E
ECON1 = 0x8 + 0x1F
EIE = 0xC + 0x1B
EIR = 0xC + 0x1C
ESTAT = 0xC + 0x1D
ECON2 = 0xC + 0x1E
ECON1 = 0xC + 0x1F
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment