#!/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 # 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 # 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.oHzHHHHH '# TRX_OFF state (H)' \ HHHH0H0H.HxHxHHHh.oHzHHHHH '# test LED' \ HHHH0HzH.HxHxHHHh.o0zHHHHH '# test nSEL' \ HHHH0HzH.HxHxHHHh.oHz0HHHH '# test MOSI' \ HHHH0HzH.HxHxHHHh.oHzHH0HH '# test SCLK'" 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