NANDBlaster fails on one machine repeatedly

Mitch Bradley wmb at
Wed Oct 7 14:24:37 EDT 2009

> I am using NANDBlaster to update all of our SFSU Lending Library XOs
> (a total of 12). All machines update via nb-secure to 8.2.1 except one
> XO, which repeatedly (five tries so far) fails to find the NANDBlaster
> info, cycles through all other options and says "Boot failed".  It
> does update via USB key though.
> Suggestions for diagnosis?

The client code that discovers a NANDblaster session is shown below.  
Additional supporting words can be seen at 

: multinand-traffic?  ( channel# -- flag )
   " "(01 00 5e 7e 01 02)" " set-multicast" $call-wlan
   d# 300 0  do
      scan-buf d# 2048 " read" $call-wlan            ( actual )
      0>  if                                         ( )
         scan-buf d# 12 + " XO" comp 0=  if          ( )
            stop-mesh                                ( )
            true unloop exit
      1 ms

: search-channels  ( -- true | chan# false )
   channel-bounds  do                          ( )
      i channel-avail?  if                     ( )
         i multinand-traffic?  if              ( )
            i unloop false exit
         then                                  ( )
      then                                     ( )
   loop                                        ( )

: find-multinand-server  ( -- true | chan# false )
: nandblaster  ( -- )
   find-multinand-server abort" No multicast NAND server"  ( chan# )

The top-level word "nandblaster" is normally called from 
"try-fs-update", which checks for an update image on USB storage, SD, 
NANDblaster, and http in turn.  try-fs-update is normally invoked by 
game key.

Any of these words can be executed manually from the ok prompt.  Also, 
you can use the Forth debugger to step through the execution 
interactively. tells how to 
use the debugger.

The operation of "find-multinand-server" should be self-explanatory.  
"search-channels" probably needs some explanation.  It really boils down 
to calling "multinand-traffic?" for channels 1, 6, and 11 .  The 
complexity (outer loop over a range of channel numbers with an inner 
"channel-avail?" filter) is due to the desire to support different 
regulatory domains that may have different allowed frequencies.

"multinand-traffic?" is the main test for nandblaster activity on a 
channel.  If you happen to know that the sender is on channel 6, for 
example, you could go directly to the test by writing:

ok  open-wlan  6 multinand-traffic? .  close-wlan

The result would be 0 for no traffic seen, ffffffff for traffic seen.

multinand-traffic? puts the wifi interface in mesh mode listening to a 
specific multicast address, then tries to receive Ethernet frames, 
looking for one whose Ethernet type field has the value "XO".

Here is a recipe for starting the debugger to step through the main 
event.  Replace 6 with the channel number - either 1, 6, or d# 11  (if 
you just type 11 you will get 0x11).

ok debug multinand-traffic?
ok open-wlan  6 multinand-traffic? .  close-wlan

Type space to step through.

More information about the Devel mailing list