#!/bin/sh . ./Common USB_ID=20b7:1540 CLOCK_DRIFT_PPM=50 enumerate() { step "Enumeration" cmd "usbwait -t 5 $USB_ID && echo okay" expect okay } led() { # # BBBBBBBB CCCCCCCC DDDDDDDD # 01234567 01234567 01234567 # # -xxxS-L- -x-----n InMM-S-- # T E R RSIO C # step "LED" cmd "echo >/dev/tty; \ echo 'Press [P]ass if the LED blinks, [F]ail if not' \ >/dev/tty; \ atrf-gpio -c -p \ xxxxxx1x.xxxxxxxx.xxxxxxxx \ delay=50 \ xxxxxx0x.xxxxxxxx.xxxxxxxx \ delay=200" doit } gpio_usb() { # P_ON state (after reset; transceiver pull-up/downs active) # # BBBBBBBB CCCCCCCC DDDDDDDD # 01234567 01234567 01234567 # # -xxxS-L- -x-----n InMM-S-- # T E R RSIO C # # Pull in P_ON v ^ -^-v v # if false; then step "GPIO scan (P_ON)" cmd "$LOCAL_EXEC atrf-gpio -d $LOCAL_DUT -p \ HHHHoHxH.HxHxHxHh.ohzoHoHH '# reset state (H)' \ HHHH0HxH.HxHxHxHh.ohzoHoHH '# test SLP_TR (0)' \ HHHHoH0H.HxHxHxHh.ohzoHoHH '# test LED (0)' \ HHHHoHxH.HxHxHxHh.LhzoHoHH '# test IRQ_RF (0)' \ HHHHoHxH.HxHxHxHh.o0zoHoHH '# test nSEL (0)' \ HHHHoHxH.HxHxHxHh.ohz0HoHH '# test MOSI (0)' \ HHHHoHxH.HxHxHxHh.ohzoH0HH '# test SCLK (0)' \ 0000o0x0.0x0x0x0h.ohzo0o00 '# reset state (0)' \ 000010x0.0x0x0x0h.ohzo0o00 '# test SLP_TR (1)' \ 0000o010.0x0x0x0h.ohzo0o00 '# test LED (1)' \ 0000o0x0.0x0x0x0h.o1zo0o00 '# test nSEL (1)' \ 0000o0x0.0x0x0x0h.ohz10o00 '# test MOSI (1)' \ 0000o0x0.0x0x0x0h.ohzo0100 '# test SCLK (1)'" doit fi # TRX_OFF state (transceiver pull-up/downs inactive) # -xxxS-L- -x-----n InMM-S-- # T E R RSIO C step "GPIO scan (TRX_OFF)" cmd "$LOCAL_EXEC atrf-gpio -d $LOCAL_DUT \ HHHH0HzH.HxHxHHHh.oHHHHHHH '# TRX_OFF state (H)' \ 0HHH0HzH.HxHxHHHh.oHHHHHHH '# test B0' \ H0HH0HzH.HxHxHHHh.oHHHHHHH '# test B1 (ICSP SCK)' \ HH0H0HzH.HxHxHHHh.oHHHHHHH '# test B2 (ICSP MOSI)' \ HHH00HzH.HxHxHHHh.oHHHHHHH '# test B3 (ICSP MISO)' \ HHHH00zH.HxHxHHHh.oHHHHHHH '# test B5' \ HHHH0H0H.HxHxHHHh.oHHHHHHH '# test B6 (LED, 0)' \ HHHH0H1H.HxHxHHHh.oHHHHHHH '# test B6 (LED, 1)' \ HHHH0Hz0.HxHxHHHh.oHHHHHHH '# test B7' \ HHHH0HzH.0xHxHHHh.oHHHHHHH '# test C0' \ HHHH0HzH.Hx0xHHHh.oHHHHHHH '# test C2' \ HHHH0HzH.HxHx0HHh.oHHHHHHH '# test C4' \ HHHH0HzH.HxHxH0Hh.oHHHHHHH '# test C5' \ HHHH0HzH.HxHxHH0h.oHHHHHHH '# test C6' \ HHHH0HzH.HxHxHHH1.oHHHHHHH '# test C7 (nRST_RF)' \ HHHH0HzH.HxHxHHHh.0HHHHHHH '# test D0 (IRQ_RF)' \ HHHH0HzH.HxHxHHHh.o0zHHHHH '# test D1 (nSS)' \ HHHH0HzH.HxHxHHHh.oH0HHHHH '# test D2 (MISO)' \ HHHH0HzH.HxHxHHHh.oHz0HHHH '# test D3 (MOSI)' \ HHHH0HzH.HxHxHHHh.oHzH0HHH '# test D4' \ HHHH0HzH.HxHxHHHh.oHzHH0HH '# test D5 (SCLK)' \ HHHH0HzH.HxHxHHHh.oHzHHH0H '# test D6' \ HHHH0HzH.HxHxHHHh.oHzHHHH0 '# test D7' \ HHHH0HzH.HxHxHHHh.oHzHHHHH '# test LED'" doit # INT # -xxxS-L- -x-----n InMM-S-- # T E R RSIO C step "GPIO scan (INT)" cmd "$LOCAL_EXEC atrf-gpio -d $LOCAL_DUT -p \ xxxxxxxx.xxxxxxxx.oxxxxxxx '# reset state' \ 0x04=1 '# IRQ_POLARITY = 1' \ xxxxxxxx.xxxxxxxx.hxxxxxxx '# test INT (1)' \ xxxxxxxx.xxxxxxxx.h0xxxxxx '# test INT (2)' \ xxxxxxxx.xxxxxxxx.h1xxxxxx '# restore nSEL' \ 0x04=0 '# IRQ_POLARITY = 0' \ xxxxxxxx.xxxxxxxx.o1xxxxxx '# test INT again'" doit # SLP_TR # -xxxS-L- -x-----n InMM-S-- # T E R RSIO C step "GPIO scan (SLP_TR)" cmd "$LOCAL_EXEC atrf-gpio -d $LOCAL_DUT \ 02=9 delay '# enter PLL_ON' \ 02:9/0x1f '# verify state' \ frame '# one-byte frame' \ 0xf: '# clear interrupts' \ 0xe=8 '# enable TRX_END intr' \ xxxxxxxx.xxxxxxxx.oxxxxxxx '# confirm INT' \ slp_tr delay '# send frame' \ xxxxxxxx.xxxxxxxx.hxxxxxxx '# check INT'" doit # nRST step "GPIO scan (nRST)" cmd "$LOCAL_EXEC atrf-gpio -d $LOCAL_DUT \ 02:8/0x1f '# verify TRX_OFF' \ reset '# reset transceiver' \ 02:0/0x1f '# verify P_ON'" doit } xtal_usb() { step "Crystal frequency" cmd "$LOCAL_EXEC atrf-xtal -d $LOCAL_DUT -p $CLOCK_DRIFT_PPM" expect_re ppm # we catch any problems via the exit code } begin usb.profile enumerate led # power ? gpio_usb identify xtal_usb spectrum transmit