--- /dev/null
+#!/usr/bin/perl
+
+use Getopt::Long;
+use HADES::TrbNet;
+use Time::HiRes qw(usleep);
+use Data::Dumper;
+
+
+trb_init_ports() or die trb_strerror();
+
+
+i2c_cmd(0xfe90,0x30,0xd2,0xe1);
+usleep(1000);
+
+i2c_cmd(0xfe90,0x30,,0xb4);
+usleep(2000);
+
+i2c_cmd(0xfe90,0x30,0xa5,0xcc);
+usleep(2000);
+i2c_cmd(0xfe90,0x30,0xa5,0x44);
+usleep(2000);
+
+sleep(1);
+
+i2c_cmd(0xfe90,0x30,,0xb4);
+usleep(2000);
+
+i2c_cmd(0xfe90,0x30,0xa5,0xcc);
+usleep(2000);
+i2c_cmd(0xfe90,0x30,0xa5,0xbe);
+usleep(2000);
+
+i2c_cmd(0xfe90,0x30,0x96);
+usleep(2000);
+i2c_cmd(0xfe90,0x30,0xe1,0xe1);
+usleep(2000);
+my $ret1 = i2c_cmd(0xfe90,0x30,0xe1);
+
+i2c_cmd(0xfe90,0x30,0x96);
+usleep(2000);
+i2c_cmd(0xfe90,0x30,0xe1,0xe1);
+usleep(2000);
+my $ret2 = i2c_cmd(0xfe90,0x30,0xe1);
+
+foreach my $f (keys %$ret1) {
+ next if ($ret1->{$f} == 0xff && $ret2->{$f} == 0xff);
+ printf("%04x\t%2.1f\n",$f,($ret1->{$f}+($ret2->{$f} << 8))/2);
+ }
+
+
+
+sub i2c_cmd {
+ my ($fpga,$addr,$cmd,$byte1,$byte2) = @_;
+ my $reg_data = (($byte2||0) << 24) + (($byte1||0) << 16) + (($cmd||0) << 8) + 0x80 + ($addr >> 1);
+ my $reg_flag = 0;
+ my $word = (defined $byte2)?1:0;
+
+ if(defined($cmd)) {
+ $reg_flag = $word? 0x001 : 0x000;
+ }
+ else {
+ $reg_flag = $word? 0x011 : 0x010;
+ }
+
+ if(defined($byte1)) {
+ trb_register_write_mem($fpga,0xd681,0,[$reg_flag,$reg_data],2);
+ }
+ else {
+ $reg_flag |= 0x100;
+ trb_register_write_mem($fpga,0xd681,0,[$reg_flag,$reg_data],2);
+ usleep(1000);
+ $reg_return = trb_register_read($fpga,0xd684);
+
+ my $ret;
+ foreach my $f (keys %$reg_return) {
+ $ret->{$f} = $reg_return->{$f}&($word?0xffff:0xff);
+ }
+ return $ret;
+ }
+ }
+
+