fpga/x359/test_scripts/mem_read.php

Go to the documentation of this file.
00001 <?php
00002 /*!***************************************************************************
00003 *! FILE NAME  : i2c.php
00004 *! DESCRIPTION: Provides single byte/short r/w from/to the i2c
00005 *!              Setting per-slave protection mask,
00006 *!              Synchronizing system clock with a "CMOS" one
00007 *! Copyright (C) 2008 Elphel, Inc
00008 *! -----------------------------------------------------------------------------**
00009 *!
00010 *!  This program is free software: you can redistribute it and/or modify
00011 *!  it under the terms of the GNU General Public License as published by
00012 *!  the Free Software Foundation, either version 3 of the License, or
00013 *!  (at your option) any later version.
00014 *!
00015 *!  This program is distributed in the hope that it will be useful,
00016 *!  but WITHOUT ANY WARRANTY; without even the implied warranty of
00017 *!  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00018 *!  GNU General Public License for more details.
00019 *!
00020 *!  You should have received a copy of the GNU General Public License
00021 *!  along with this program.  If not, see <http://www.gnu.org/licenses/>.
00022 *! -----------------------------------------------------------------------------**
00023 *!  $Log: mem_read.php,v $
00024 *!  Revision 1.1  2008/06/23 08:11:58  dzhimiev
00025 *!  1. added more scripts for 10359 board
00026 *!
00027 *!  Revision 1.2  2008/06/16 07:43:58  dzhimiev
00028 *!  mcontr address range changed from 0x0820-0x082F to 0x0840-0x085F (for making extra channels)
00029 *!
00030 *!  Revision 1.2  2008/02/13 00:30:01  elphel
00031 *!  Added system time synchronization  with "CMOS" clock
00032 *!
00033 *!  Revision 1.1  2008/02/12 21:53:20  elphel
00034 *!  Modified I2c to support multiple buses, added raw access (no address registers) and per-slave protection bitmasks
00035 *!
00036 *!
00037 */
00038 
00039 function oldone($width,$bus,$raw=0) { //$a<0 - use raw read/write
00040         send_i2c_4($width,$bus,0x0827,0x00000000,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00041         send_i2c_4($width,$bus,0x0827,0x00000001,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00042 
00043         send_i2c_4($width,$bus,0x082c,0x00004000,$raw=0); printf("sent %d\n",$cnt); $cnt++; // set channel 3 to write
00044         send_i2c_4($width,$bus,0x082d,0x000001f0,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00045         send_i2c_4($width,$bus,0x082e,0x00000005,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00046 
00047         send_i2c_4($width,$bus,0x0827,0x00000021,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00048 
00049         send_i2c_4($width,$bus,0x0831,0x01020304,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00050         send_i2c_4($width,$bus,0x0831,0x05060708,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00051         send_i2c_4($width,$bus,0x0831,0x090a0b0c,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00052         send_i2c_4($width,$bus,0x0831,0x0d0e0f10,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00053 
00054         send_i2c_4($width,$bus,0x0831,0x11121314,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00055         send_i2c_4($width,$bus,0x0831,0x15161718,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00056         send_i2c_4($width,$bus,0x0831,0x191a1b1c,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00057         send_i2c_4($width,$bus,0x0831,0x1d1e1f20,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00058 
00059         send_i2c_4($width,$bus,0x0831,0x21222324,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00060         send_i2c_4($width,$bus,0x0831,0x25262728,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00061         send_i2c_4($width,$bus,0x0831,0x292a2b2c,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00062         send_i2c_4($width,$bus,0x0831,0x2d2e2f30,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00063 
00064         send_i2c_4($width,$bus,0x0831,0x31323334,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00065         send_i2c_4($width,$bus,0x0831,0x35363738,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00066         send_i2c_4($width,$bus,0x0831,0x393a3b3c,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00067         send_i2c_4($width,$bus,0x0831,0x3d3e3f40,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00068 
00069         send_i2c_4($width,$bus,0x0831,0x41424344,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00070         send_i2c_4($width,$bus,0x0831,0x45464748,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00071         send_i2c_4($width,$bus,0x0831,0x494a4b4c,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00072         send_i2c_4($width,$bus,0x0831,0x4d4e4f50,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00073 
00074         send_i2c_4($width,$bus,0x0831,0x51525354,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00075         send_i2c_4($width,$bus,0x0831,0x55565758,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00076         send_i2c_4($width,$bus,0x0831,0x595a5b5c,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00077         send_i2c_4($width,$bus,0x0831,0x5d5e5f60,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00078 
00079         send_i2c_4($width,$bus,0x0831,0x61626364,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00080         send_i2c_4($width,$bus,0x0831,0x65666768,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00081         send_i2c_4($width,$bus,0x0831,0x696a6b6c,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00082         send_i2c_4($width,$bus,0x0831,0x6d6e6f70,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00083 
00084         send_i2c_4($width,$bus,0x0831,0x71727374,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00085         send_i2c_4($width,$bus,0x0831,0x75767778,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00086         send_i2c_4($width,$bus,0x0831,0x797a7b7c,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00087         send_i2c_4($width,$bus,0x0831,0x7d7e7f80,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00088 
00089         send_i2c_4($width,$bus,0x0831,0x01020304,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00090         send_i2c_4($width,$bus,0x0831,0x05060708,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00091         send_i2c_4($width,$bus,0x0831,0x090a0b0c,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00092         send_i2c_4($width,$bus,0x0831,0x0d0e0f10,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00093 
00094         send_i2c_4($width,$bus,0x0831,0x11121314,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00095         send_i2c_4($width,$bus,0x0831,0x15161718,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00096         send_i2c_4($width,$bus,0x0831,0x191a1b1c,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00097         send_i2c_4($width,$bus,0x0831,0x1d1e1f20,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00098 
00099         send_i2c_4($width,$bus,0x0831,0x21222324,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00100         send_i2c_4($width,$bus,0x0831,0x25262728,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00101         send_i2c_4($width,$bus,0x0831,0x292a2b2c,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00102         send_i2c_4($width,$bus,0x0831,0x2d2e2f30,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00103 
00104         send_i2c_4($width,$bus,0x0831,0x31323334,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00105         send_i2c_4($width,$bus,0x0831,0x35363738,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00106         send_i2c_4($width,$bus,0x0831,0x393a3b3c,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00107         send_i2c_4($width,$bus,0x0831,0x3d3e3f40,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00108 
00109         send_i2c_4($width,$bus,0x0831,0x41424344,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00110         send_i2c_4($width,$bus,0x0831,0x45464748,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00111         send_i2c_4($width,$bus,0x0831,0x494a4b4c,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00112         send_i2c_4($width,$bus,0x0831,0x4d4e4f50,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00113 
00114         send_i2c_4($width,$bus,0x0831,0x51525354,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00115         send_i2c_4($width,$bus,0x0831,0x55565758,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00116         send_i2c_4($width,$bus,0x0831,0x595a5b5c,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00117         send_i2c_4($width,$bus,0x0831,0x5d5e5f60,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00118 
00119         send_i2c_4($width,$bus,0x0831,0x61626364,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00120         send_i2c_4($width,$bus,0x0831,0x65666768,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00121         send_i2c_4($width,$bus,0x0831,0x696a6b6c,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00122         send_i2c_4($width,$bus,0x0831,0x6d6e6f70,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00123 
00124         send_i2c_4($width,$bus,0x0831,0x71727374,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00125         send_i2c_4($width,$bus,0x0831,0x75767778,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00126         send_i2c_4($width,$bus,0x0831,0x797a7b7c,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00127         send_i2c_4($width,$bus,0x0831,0x7d7e7f80,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00128 
00129 
00130 
00131         printf("\n");
00132 
00133 send_i2c_4($width,$bus,0x0834,0x11223344,$raw=0); printf("sent %d\n",$cnt); $cnt++; // init ch3 and request
00134 
00135         $data=receive_i2c_4($width,$bus,$adr,$raw=0); // first try to read 4
00136         printf("i2c_4 read slave 0x%04x ",0x0860);
00137         printf("acquired data is 0x%08x\n",$data);// 0x%x",$data[2]);
00138 
00139         $data=receive_i2c_4($width,$bus,0x0841,$raw=0); // first try to read 4
00140         printf("i2c_4 read slave 0x%04x ",0x0841);
00141         printf("acquired data is 0x%08x\n",$data);// 0x%x",$data[2]);
00142 
00143         $data=receive_i2c_4($width,$bus,0x0844,$raw=0); // read from 
00144         printf("i2c_4 read slave 0x%04x ",0x0844);
00145         printf("acquired data is 0x%08x\n",$data);// 0x%x",$data[2]);
00146 
00147         $data=receive_i2c_4($width,$bus,$adr,$raw=0); // first try to read 4
00148         printf("i2c_4 read slave 0x%04x ",0x0860);
00149         printf("acquired data is 0x%08x\n",$data);// 0x%x",$data[2]);
00150 
00151         //send_i2c_4($width,$bus,0x0827,0x00000001,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00152 
00153         send_i2c_4($width,$bus,0x082c,0x00000000,$raw=0); printf("sent %d\n",$cnt); $cnt++; // set channel 3 to write
00154         send_i2c_4($width,$bus,0x082d,0x000001f0,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00155         send_i2c_4($width,$bus,0x082e,0x00000005,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00156 
00157 //send_i2c_4($width,$bus,0x0834,0x11223344,$raw=0); printf("sent %d\n",$cnt); $cnt++; // init ch3 and request
00158 
00159         $data=receive_i2c_4($width,$bus,$adr,$raw=0); // first try to read 4
00160         printf("i2c_4 read slave 0x%04x ",0x0860);
00161         printf("acquired data is 0x%08x\n",$data);// 0x%x",$data[2]);
00162 
00163 //send_i2c_4($width,$bus,0x0827,0x00000021,$raw=0); printf("sent %d\n",$cnt); $cnt++;
00164 
00165         $data=receive_i2c_4($width,$bus,$adr,$raw=0); // first try to read 4
00166         printf("i2c_4 read slave 0x%04x ",0x0860);
00167         printf("acquired data is 0x%08x\n",$data);// 0x%x",$data[2]);
00168 
00169         $data_array=receive_i2c_n($width,$bus,0x0833,$raw=0); // first try to read 4
00170         //printf("i2c_4 read slave 0x%08x \n",0x0833);
00171         //printf("acquired data is 0x%08x\n",$data);
00172         
00173         for ($i=0,$index=count($data_array); $i<$index;$i++) 
00174         {
00175                 printf("acquired data is 0x%08x\n",$data_array[$i]);
00176  }
00177 
00178         printf("\n");
00179 }
00180 
00181 function send_i2c($width,$bus,$a,$d,$raw=0) { //$a<0 - use raw read/write
00182    $w=($width==16)?2:1;
00183    $i2c_fn='/dev/xi2c'.($raw?'raw':(($w==2)?'16':'8')).(($bus==0)?'':'_aux');
00184    $i2c  = fopen($i2c_fn, 'w');
00185    fseek ($i2c, $w*$a) ;
00186    if ($w==1)    $res=fwrite($i2c, chr ($d));
00187    else          $res=fwrite($i2c, chr (floor($d/256)).chr ($d-256*floor($d/256)));
00188    fclose($i2c);
00189    return $res;
00190 } // end of send_i2c()
00191 
00192 function receive_i2c($width,$bus,$a,$raw=0) {
00193    $w=($width==16)?2:1;
00194    $i2c_fn='/dev/xi2c'.($raw?'raw':(($w==2)?'16':'8')).(($bus==0)?'':'_aux');
00195    $i2c  = fopen($i2c_fn, 'r');
00196    fseek ($i2c, $w*$a);
00197    $data = fread($i2c, $w);
00198    fclose($i2c);
00199    if (strlen($data)<$w) return -1;
00200    $v=unpack(($w==1)?'C':'n1',$data);
00201    return $v[1];
00202 } // end of receive_i2c()
00203 
00204 function receive_i2c_4($width,$bus,$a,$raw=0) {
00205    $w=($width==16)?2:1;
00206    $i2c_fn='/dev/xi2c'.($raw?'raw':(($w==2)?'16':'8')).(($bus==0)?'':'_aux');
00207    $i2c  = fopen($i2c_fn, 'r');
00208          fseek ($i2c, 4, SEEK_END);
00209    fseek ($i2c, $w*$a);
00210          
00211    $data = fread($i2c, 2*$w);
00212    fclose($i2c);
00213    if (strlen($data)<2*$w) return -1;
00214    $v=unpack(($w==1)?'C*':'N*',$data);
00215          //print_r($v);
00216          //printf("0x%x\n",$v[1]);
00217          return $v[1];
00218 } // end of receive_i2c()
00219 
00220 function receive_i2c_n($width,$bus,$a,$raw=0) {
00221    $w=($width==16)?2:1;
00222    $i2c_fn='/dev/xi2c'.($raw?'raw':(($w==2)?'16':'8')).(($bus==0)?'':'_aux');
00223    $i2c  = fopen($i2c_fn, 'r');
00224          fseek ($i2c, 16*4, SEEK_END);
00225    fseek ($i2c, $w*$a);
00226          
00227    $data = fread($i2c, 2*$w*4*4);
00228    fclose($i2c);
00229    if (strlen($data)<2*$w) return -1;
00230    $v=unpack(($w==1)?'C*':'N*',$data);
00231          //print_r($v);
00232          //printf("0x%x\n",$v[1]);
00233          return array($v[1],$v[2],$v[3],$v[4],$v[5],$v[6],$v[7],$v[8],$v[9],$v[10],$v[11],$v[12],$v[13],$v[14],$v[15],$v[16]);
00234 } // end of receive_i2c()
00235 
00236 function send_i2c_4($width,$bus,$a,$d,$raw=0) { //$a<0 - use raw read/write
00237    $w=($width==16)?2:1;
00238    $i2c_fn='/dev/xi2c'.($raw?'raw':(($w==2)?'16':'8')).(($bus==0)?'':'_aux');
00239    $i2c  = fopen($i2c_fn, 'w');
00240    fseek ($i2c, $w*$a) ;
00241    if ($w==1)    $res=fwrite($i2c, chr ($d));
00242    else          $res=fwrite($i2c, chr (floor($d/(256*256*256))).chr (($d - 256*256*256*floor($d/(256*256*256)))/(256*256)).chr (($d - 256*256*floor($d/(256*256)))/256).chr ($d - 256*floor($d/(256))) );
00243 
00244          //printf("Sending passage ");
00245          printf("0x%02x%02x%02x%02x ",(floor($d/(256*256*256))),(($d - 256*256*256*floor($d/(256*256*256)))/(256*256)),(($d - 256*256*floor($d/(256*256)))/256),($d - 256*floor($d/(256))));     
00246          //printf("\n");
00247 
00248    fclose($i2c);
00249    return $res;
00250 } // end of send_i2c()
00251 
00252 function send_i2c_4a($width,$bus,$a,$d,$raw=0) { //$a<0 - use raw read/write
00253    $w=($width==16)?2:1;
00254    $i2c_fn='/dev/xi2c'.($raw?'raw':(($w==2)?'16':'8')).(($bus==0)?'':'_aux');
00255    $i2c  = fopen($i2c_fn, 'w');
00256    fseek ($i2c, $w*$a) ;
00257    if ($w==1)    $res=fwrite($i2c, chr ($d));
00258    else          $res=fwrite($i2c, chr (floor($d/(256*256*256))).chr (($d - 256*256*256*floor($d/(256*256*256)))/(256*256)).chr (($d - 256*256*floor($d/(256*256)))/256).chr ($d - 256*floor($d/(256))) );
00259 
00260          //printf("Sending passage ");
00261          printf("%02x%02x%02x%02x ",(floor($d/(256*256*256))),(($d - 256*256*256*floor($d/(256*256*256)))/(256*256)),(($d - 256*256*floor($d/(256*256)))/256),($d - 256*floor($d/(256))));       
00262          //printf("\n");
00263 
00264    fclose($i2c);
00265    return $res;
00266 } // end of send_i2c()
00267 
00268 function send_i2c_4_nc($width,$bus,$a,$d,$raw=0) { //$a<0 - use raw read/write
00269    $w=($width==16)?2:1;
00270    $i2c_fn='/dev/xi2c'.($raw?'raw':(($w==2)?'16':'8')).(($bus==0)?'':'_aux');
00271    $i2c  = fopen($i2c_fn, 'w');
00272    fseek ($i2c, $w*$a) ;
00273    if ($w==1)    $res=fwrite($i2c, chr ($d));
00274    else          $res=fwrite($i2c, chr (floor($d/(256*256*256))).chr (($d - 256*256*256*floor($d/(256*256*256)))/(256*256)).chr (($d - 256*256*floor($d/(256*256)))/256).chr ($d - 256*floor($d/(256))) );
00275 
00276          //printf("Sending passage ");
00277          //printf("%02x%02x%02x%02x ",(floor($d/(256*256*256))),(($d - 256*256*256*floor($d/(256*256*256)))/(256*256)),(($d - 256*256*floor($d/(256*256)))/256),($d - 256*floor($d/(256))));     
00278          //printf("\n");
00279 
00280    fclose($i2c);
00281    return $res;
00282 } // end of send_i2c()
00283 
00284 function dcm_reset($width,$bus,$raw=0){
00285 
00286         printf("sent 0x%04x ",0x0810); send_i2c_4($width,$bus,0x0810,0xffffffff,$raw=0);
00287         printf("\nsent 0x%04x ",0x0810); send_i2c_4($width,$bus,0x0810,0x00000000,$raw=0);
00288         
00289 }
00290 
00291 function ramb_check($width,$bus,$raw=0){
00292         printf("Data sent:     ");
00293 
00294         send_i2c_4($width,0,0x0801,0x01020343,$raw=0);
00295         send_i2c_4($width,0,0x0801,0x05060787,$raw=0);
00296         send_i2c_4($width,0,0x0801,0x090a0bcb,$raw=0);
00297         send_i2c_4($width,0,0x0801,0x0d0e0f0f,$raw=0);
00298 
00299         send_i2c_4($width,$bus,0x0801,0x11121314,$raw=0);
00300         send_i2c_4($width,$bus,0x0801,0x15161718,$raw=0);
00301         send_i2c_4($width,$bus,0x0801,0x191a1b1c,$raw=0);
00302         send_i2c_4($width,$bus,0x0801,0x1d1e1f20,$raw=0);
00303 
00304         send_i2c_4($width,$bus,0x0801,0x21222324,$raw=0);
00305         send_i2c_4($width,$bus,0x0801,0x25262728,$raw=0);
00306         send_i2c_4($width,$bus,0x0801,0x292a2b2c,$raw=0);
00307         send_i2c_4($width,$bus,0x0801,0x2d2e2f30,$raw=0);
00308 
00309         send_i2c_4($width,$bus,0x0801,0x31323334,$raw=0);
00310         send_i2c_4($width,$bus,0x0801,0x35363738,$raw=0);
00311         send_i2c_4($width,$bus,0x0801,0x393a3b3c,$raw=0);
00312         send_i2c_4($width,$bus,0x0801,0x3d3e3f40,$raw=0);
00313 
00314         printf("\nData received: ");
00315         for ($i=0;$i<16;$i++)
00316         {
00317                 $data=receive_i2c_4($width,$bus,0x0868,$raw=0); // first try to read 4
00318                 printf("0x%08x ",$data);// 0x%x",$data[2]);
00319         }
00320 }
00321 
00322 function ddr_init($width,$bus,$raw=0){
00323 
00324         printf("sent 0x%04x ",0x0827); send_i2c_4($width,$bus,0x0827,0x00000000,$raw=0); printf("\n");
00325 
00326         printf("sent 0x%04x ",0x0823); send_i2c_4($width,$bus,0x0823,0x00017fff,$raw=0); 
00327 
00328         $data=receive_i2c_4($width,$bus,0x0841,$raw=0); 
00329         printf("read 0x%04x 0x%08x\n",0x0841,$data);
00330 
00331         printf("sent 0x%04x ",0x0823); send_i2c_4($width,$bus,0x0823,0x00002002,$raw=0); 
00332 
00333         $data=receive_i2c_4($width,$bus,0x0841,$raw=0); 
00334         printf("read 0x%04x 0x%08x\n",0x0841,$data);
00335 
00336         printf("sent 0x%04x ",0x0823); send_i2c_4($width,$bus,0x0823,0x00000163,$raw=0); 
00337 
00338         $data=receive_i2c_4($width,$bus,0x0841,$raw=0); 
00339         printf("read 0x%04x 0x%08x\n",0x0841,$data);
00340 
00341         printf("sent 0x%04x ",0x0823); send_i2c_4($width,$bus,0x0823,0x00008000,$raw=0);
00342 
00343         $data=receive_i2c_4($width,$bus,0x0841,$raw=0); 
00344         printf("read 0x%04x 0x%08x\n",0x0841,$data);
00345 
00346         printf("sent 0x%04x ",0x0823); send_i2c_4($width,$bus,0x0823,0x00008000,$raw=0);
00347 
00348         $data=receive_i2c_4($width,$bus,0x0841,$raw=0); 
00349         printf("read 0x%04x 0x%08x\n",0x0841,$data);
00350 
00351         printf("sent 0x%04x ",0x0823); send_i2c_4($width,$bus,0x0823,0x00017fff,$raw=0); 
00352 
00353         $data=receive_i2c_4($width,$bus,0x0841,$raw=0);
00354         printf("read 0x%04x 0x%08x\n",0x0841,$data);
00355 
00356 }
00357 
00358 function ddr_write($width,$bus,$sa,$raw=0){
00359 
00360         send_i2c_4_nc($width,$bus,0x0827,0x00000000,$raw=0); // turn off channels
00361         send_i2c_4_nc($width,$bus,0x0827,0x00000001,$raw=0); // turn on auto refresh
00362 
00363         send_i2c_4_nc($width,$bus,0x082c,0x00004000+4*$sa,$raw=0); // set ch3 start addr
00364         send_i2c_4_nc($width,$bus,0x082d,0x000001f0,$raw=0); // set block size to write = 256 16-bit words
00365         //send_i2c_4_nc($width,$bus,0x082e,0x00000003,$raw=0); // number of blocks can be written
00366         //send_i2c_4_nc($width,$bus,0x082e,0x00000004,$raw=0); // number of blocks can be written
00367         send_i2c_4_nc($width,$bus,0x082e,0x00000003,$raw=0); // number of blocks can be written
00368 
00369         send_i2c_4_nc($width,$bus,0x0827,0x00000021,$raw=0); // turn on channel 3
00370 
00371         printf("Sent array to Row 0x%08x\n",$sa);
00372 
00373         printf("<font color=DARKBLUE>");
00374 
00375         $aha1=0;
00376         for($aha=0;$aha<512;$aha++){
00377 
00378                 $aha2=$aha+0x01000000*$sa;
00379 
00380                 printf("%08x ",$aha2);
00381 
00382                 send_i2c_4_nc($width,$bus,0x0831,$aha2,$raw=0);
00383                 
00384                 if ($aha1==15) {$aha1=0; printf("\n");}
00385                 else           {$aha1++;} 
00386 
00387         }
00388 
00389         printf("</font>");
00390 
00391         send_i2c_4_nc($width,$bus,0x0834,0x11223344,$raw=0); // write 256
00392         send_i2c_4_nc($width,$bus,0x0834,0x11223344,$raw=0); // write 256
00393         send_i2c_4_nc($width,$bus,0x0834,0x11223344,$raw=0); // write 256
00394         send_i2c_4_nc($width,$bus,0x0834,0x11223344,$raw=0); printf("\n"); // write 256
00395 
00396 }
00397 
00398 function ddr_page_read($width,$bus,$rra,$raw=0){
00399         //send_i2c_4_nc($width,$bus,0x0827,0x00000000,$raw=0); // turn off channels
00400         send_i2c_4_nc($width,$bus,0x0827,0x00000021,$raw=0); // turn on channel 3
00401 
00402         send_i2c_4_nc($width,$bus,0x082d,0x000001f0,$raw=0);
00403         send_i2c_4_nc($width,$bus,0x082e,0x00000003,$raw=0);
00404         
00405         printf("Acquired data from row 0x%08x\n",$rra);
00406 
00407         send_i2c_4_nc($width,$bus,0x082c,4*$rra,$raw=0);
00408         
00409         printf("<font color=\"#0000FF\">");
00410         for($g=0;$g<32;$g++){
00411                 $data_array=receive_i2c_n($width,$bus,0x0833,$raw=0); // read page
00412                 $j=0;
00413                 
00414                 for ($i=0,$index=count($data_array); $i<$index;$i++) 
00415                 {
00416                         printf("%08x ",$data_array[$i]);
00417                         if ($j==15) {$j=0; printf("\n");}
00418                         else        {$j++;              }
00419                 }
00420         }
00421         printf("\n</font>");
00422 
00423 }
00424 
00425   $width=16;
00426   $bus=0;
00427   $raw=0;
00428 
00429         $phase_shift=0;
00430         $row_adr=0x3ff;
00431         $N=0;
00432         $N_shifts=1;
00433 
00434         printf("<pre>");
00435         foreach($_GET as $key=>$value) {
00436                 switch($key) {
00437                         case "phase_shift": $phase_shift=$value+0; break;
00438                         case "row_adr"    : $row_adr=$value+0;     break;
00439                         case "N"          : $N=$value+0;           break;
00440                         case "N_shifts"   : $N_shifts=$value+0;    break;
00441                 }
00442         }
00443 
00444         if ($phase_shift==0) {
00445                 printf("<h3>Reset DCM</h3>");
00446                 dcm_reset($width,$bus,$raw=0);
00447         }else{
00448                 printf("<h3>Phase Shift DCM</h3>");
00449                 for($i=1;$i<$N_shifts;$i++){
00450                         send_i2c_4($width,$bus,0x0808,$phase_shift,$raw=0);
00451                         sleep(1);
00452                 }
00453         }
00454 
00455         printf("<h3>RAMB & I2C test</h3>");
00456         ramb_check($width,$bus,$raw=0);
00457 
00458         printf("<h3>DDR Initialization sequence</h3>");
00459         ddr_init($width,$bus,$raw=0);
00460 
00461         printf("<h3>Read DDR</h3>");
00462         for($i=$row_adr;$i<=$row_adr+$N;$i++){
00463                 ddr_page_read($width,$bus,$i,$raw=0); // $rsa=
00464         }
00465         printf("</pre>");
00466 
00467 ?>

Generated on Thu Aug 7 16:18:59 2008 for elphel by  doxygen 1.5.1