my $help;
my $endpoint;
-my $chain;
+my $rchain;
my $channel;
my $execute="";
my $register;
my $WRITE = 0x8<<20; # bits to set for a write command
my $REGNR = 24; # number of bits to shift for the register number
+my $severe = 0;
+
my $result = GetOptions (
"h|help" => \$help,
- "c|chain=i" => \$chain,
+ "c|chain=s" => \$rchain,
"n|channel=i" => \$channel,
"e|endpoint=s" => \$endpoint,
"x|execute=s" => \$execute,
exit;
}
-if ($help || !defined $endpoint || !defined $chain) {
+if ($help || !defined $endpoint || !defined $rchain) {
usage();
}
}
$endpoint = &conv_input_string_to_number($endpoint, "endpoint", "hex");
-$chain = &conv_input_string_to_number($chain, "chain");
+#$chain = &conv_input_string_to_number($chain, "chain");
$register = &conv_input_string_to_number($register, "register") if (defined $register);
$channel = &conv_input_string_to_number($channel, "channel") if (defined $channel);
$data = &conv_input_string_to_number($data, "data") if (defined $data);
$rr = &conv_input_string_to_number($rr, "readreg") if (defined $rr);
$wr = &conv_input_string_to_number($wr, "writereg") if (defined $wr);
+my $sendcmd_executed_once = 0;
#print "execute: $execute\n";
#exit;
+my $chain = 0;
+
+my @qchain = (eval $rchain);
+foreach my $dchain (@qchain) {
+ $chain = $dchain;
+ #printf("*** %i \n", $chain);
sub sendcmd16 {
my @cmd = @_;
usleep(1000);
}
-my $sendcmd_executed_once = 0;
+
sub sendcmd {
my ($cmd) = @_;
$sendcmd_executed_once = 1;
sub checkcfgflash {
my $b = sendcmd(0x5C<<$REGNR | $READ);
foreach my $e (sort keys %$b) {
- printf(" %x ",$b->{$e}&0xfff);
+ #printf(" %x ",$b->{$e}&0xfff);
if (($b->{$e}&0xfff) ne 0x101) {
- die "config flash not enabled";
+ if ($severe eq 0) {
+ die "config flash not enabled, maybe timeout? \n";
+ } else {
+ printf(" ************************************** \n");
+ printf(" a severe error happened !!! \n");
+ printf(" most likely the cfg flash is corrupted\n");
+ printf(" don't make a power cycle unless the\n");
+ printf(" problem is solved\n");
+ printf(" **************************************\n");
+ die;
+ }
}
}
}
sub enableccfgflash {
- sendcmd(0x51<<$REGNR | $WRITE | 0x8);
- sendcmd(0x50<<$REGNR | $WRITE | 0x0);
sendcmd(0x5C<<$REGNR | $WRITE | 0x103);
sendcmd(0x5C<<$REGNR | $WRITE | 0x105);
sendcmd(0x5C<<$REGNR | $WRITE | 0x101);
+ sendcmd(0x51<<$REGNR | $WRITE | 0x8);
+ sendcmd(0x50<<$REGNR | $WRITE | 0x0);
}
sub enableuserflash {
+ sendcmd(0x5C<<$REGNR | $WRITE | 0x100);
sendcmd(0x51<<$REGNR | $WRITE | 0x8);
sendcmd(0x50<<$REGNR | $WRITE | 0x0);
- sendcmd(0x5C<<$REGNR | $WRITE | 0x100);
}
if ($execute eq "enableccfgflash" | defined $enablecfgflash) {
printf(" busy - try again\n");
usleep(300000);
}
+ $severe=1;
+ checkcfgflash();
my $p = 0;
while (my $s = <INF>) {
my @t = split(' ',$s);
}
#flash only if RAM ok
+ checkcfgflash();
sendcmd(0x51<<$REGNR | $WRITE | 0x4);
sendcmd(0x50<<$REGNR | $WRITE | $p);
}
}
+}
if ($sendcmd_executed_once == 0) {
print "no command was executed. Given command \"$execute\" seems to be unknown. use \"-h\" for help.\n";