Changes for page Front I/O
Last modified by Kevin Wiki on 2024/07/07 22:48
From version
7.4
edited by Kevin Wiki
on 2024/07/05 10:16
on 2024/07/05 10:16
Change comment:
There is no comment for this version
To version 1.1
edited by Kevin Wiki
on 2024/02/17 18:50
on 2024/02/17 18:50
Change comment:
There is no comment for this version
Summary
Details
- Page properties
-
- Content
-
... ... @@ -1,228 +1,45 @@ 1 +(% class="jumbotron" %) 2 +((( 3 +(% class="container" %) 4 +((( 5 += My new article = 6 + 7 +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed viverra enim quis tristique tincidunt. Morbi nec hendrerit mi. Mauris convallis tortor et justo gravida elementum. Mauris dictum imperdiet quam, quis sodales velit tempus varius. Ut convallis mi rutrum imperdiet eleifend. Ut diam sapien, iaculis facilisis nisl non, varius cursus eros. Praesent vitae ipsum molestie enim pulvinar semper nec a nisi. 8 +))) 9 +))) 10 + 1 1 (% class="row" %) 2 2 ((( 3 3 (% class="col-xs-12 col-sm-8" %) 4 4 ((( 5 -= P inout=15 += Paragraph 1 = 6 6 7 - There is a single cable that controlsfourparts,eachhalfsideofI/OLEDandcentercolumn ofblueLEDs.17 +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 8 8 9 - [[image:xserveio main cable and PCBpinout.drawio.png||alt="xserve io main cablepinout.drawio.png"]]19 +== Sub-paragraph == 10 10 11 -(% class="wikigeneratedid" %) 12 -[[attach:xserve io main cable and PCB pinout.drawio.svg||target="_blank"]] 21 +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 13 13 14 -(% class="wikigeneratedid" %) 15 -This cable allows us to communicate with 4 chips using two data lines, audio & service switch, case switch and (yet to be documented) compute LEDs 23 +== Sub-paragraph == 16 16 17 - =Howwe got here=25 +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 18 18 19 - Measureout the ground and powersignalsbycomparing with other chips on board. E.g. we find [SAA1064T] datasheet, locate the GND (Vee) and 5V (Vcc) and measure connectivity (0 ohm resistance) between chippins and cable pins. Thisgives us pins GND 2 & 8 and PWR 16 & 22.27 +=== Sub-sub paragraph === 20 20 21 - Wekeep doing thisforSCL&SDApinsonSAA1064Tchipandfindpins14&15and20&21areI2Cclockanddata pinsforeachchip.29 +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 22 22 23 -== Finding i2c chip address == 24 24 25 -= ==SAA1064T===32 += Paragraph 2 = 26 26 27 - ReadingthedatasheetforSAA1064T chipwe findthat:"//ThisresultsinthecorrespondingvalidaddressesHEX 70, 72, 74 and76 forwritingand71,73,75and 77 forreading.Allotheraddressescannotbe acknowledgedbythecircuit".// Givingusa cluewhatwearelookingfor, i2c addresses0x70,0x72or0x74.34 +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 28 28 29 -== =PCA9554===36 +== Sub-paragraph == 30 30 31 -asdf 38 +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 32 32 33 -== =Code example finding i2caddresses===40 +== Sub-paragraph == 34 34 35 -We can test the following addresses manually or use the following code snippet: 36 - 37 -{{code language="C++"}} 38 -/*I2C_scanner 39 - This sketch tests standard 7-bit addresses. 40 - Devices with higher bit address might not be seen properly.*/ 41 - 42 -#include <Wire.h> 43 - 44 -void setup() { 45 - Wire.begin(); 46 - 47 - Serial.begin(9600); 48 - while (!Serial); 49 - Serial.println("\nI2C Scanner"); 50 -} 51 - 52 -void loop() { 53 - byte error, address; 54 - int nDevices; 55 - 56 - Serial.println("Scanning..."); 57 - 58 - nDevices = 0; 59 - for (address = 1; address < 127; address++ ) { 60 - Wire.beginTransmission(address); 61 - error = Wire.endTransmission(); 62 - 63 - if (error == 0) { 64 - Serial.print("I2C device found at address 0x"); 65 - if (address < 16) 66 - Serial.print("0"); 67 - Serial.print(address, HEX); 68 - Serial.println(" !"); 69 - 70 - nDevices++; 71 - } 72 - else if (error == 4) { 73 - Serial.print("Unknown error at address 0x"); 74 - if (address < 16) 75 - Serial.print("0"); 76 - Serial.println(address, HEX); 77 - } 78 - } 79 - if (nDevices == 0) 80 - Serial.println("No I2C devices found\n"); 81 - else 82 - Serial.println("done\n"); 83 - 84 - delay(5000); 85 -} 86 -{{/code}} 87 - 88 -== i2c multiplexing with TCA9548 == 89 - 90 -We have two sets of chips, one for left and one for right where we have two different i2c chips on each side for controlling lights. Since the chips controlling their respective parts have the same address for each side, we can't distinguish them from each other. To handle this we use a i2c multiplexer to selectively communicate with one half at a time, switching TCA9548 between two different output ports. 91 - 92 -=== Code example finding i2c ports === 93 - 94 -To verify wiring, connection, output ports and device addresses run the following script: 95 - 96 -{{code language="c++"}} 97 -/** 98 - * TCA9548 I2CScanner.ino -- I2C bus scanner for Arduino 99 - * 100 - * Based on https://playground.arduino.cc/Main/I2cScanner/ 101 - * 102 - */ 103 - 104 -#include "Wire.h" 105 - 106 -#define TCAADDR 0x70 107 - 108 -void tcaselect(uint8_t i) { 109 - if (i > 7) return; 110 - 111 - Wire.beginTransmission(TCAADDR); 112 - Wire.write(1 << i); 113 - Wire.endTransmission(); 114 -} 115 - 116 - 117 -// standard Arduino setup() 118 -void setup() 119 -{ 120 - while (!Serial); 121 - delay(1000); 122 - 123 - Wire.begin(); 124 - 125 - Serial.begin(9600); 126 - Serial.println("\nTCAScanner ready!"); 127 - 128 - for (uint8_t t=0; t<8; t++) { 129 - tcaselect(t); 130 - Serial.print("TCA Port #"); Serial.println(t); 131 - 132 - for (uint8_t addr = 0; addr<=127; addr++) { 133 - if (addr == TCAADDR) continue; 134 - 135 - Wire.beginTransmission(addr); 136 - if (!Wire.endTransmission()) { 137 - Serial.print("Found I2C 0x"); Serial.println(addr,HEX); 138 - } 139 - } 140 - } 141 - Serial.println("\ndone"); 142 -} 143 - 144 -void loop() 145 -{ 146 -} 147 -{{/code}} 148 - 149 -== SAA1064T data for driving center IO LED stack == 150 - 151 -Center IO stack is a stack of 24 LED's, 23 blue and 1 green for ethernet activity. These are duplicated next to each other and driven by each their SAA1064T chips. Earlier we found the i2c address and just by playing around figured out that 4 segments of 1 byte binary values are used to set ship register. 152 - 153 -{{code language="C++"}} 154 -void fillColumns() { 155 - Serial.println("filling columns"); 156 - Wire.beginTransmission(saa1064); 157 - Wire.write(1); 158 - Wire.write(0x7F); // 127 - 1111111 159 - Wire.write(0x7F); // 127 - 1111111 160 - Wire.write(0x7F); // 127 - 1111111 161 - Wire.write(0x1F); // 31 - 11111 162 - Wire.endTransmission(); 163 - 164 - colsFilled = 1; 165 -} 166 -{{/code}} 167 - 168 -(% class="wikigeneratedid" %) 169 -~-~- Here the last byte we send only is 5 bits since we only have 5 LEDs instead of 6 to address (total of 24). Also note that we start the transmission with a single bit. ~-~- 170 - 171 -== Pinouts voltages from MLB == 172 - 173 -Powered off: 174 - 175 -* PWR fail LED - 0.00 V 176 -* UID LED - 4.5V 177 -* OH/Fan fail LED - 4.72 V 178 -* NIC1 LED - 0.8 - 2.6 V 179 -* NIC2 LED - 2.95 V 180 -* UID SW - 2.8V 181 -* HDD LED - 0.00 V 182 -* Power LED P3V3 - 0.00V 183 -* Power LED - 0.00 V after unplug grows 184 - 185 -Powered on: 186 - 187 -* PWR tail LED - 3.47 V 188 -* UID LED - 4.85V 189 -* OH/Fan failed LED - 5 V 190 -* NIC 1 LED - 1.2 - 2.9 V 191 -* NIC 2 LED - 3.2 V 192 -* UID SW - 3V 193 -* HDD LED - 3 V 194 -* Power LED P3V3 - 3.30V 195 -* Power LED - 0.87 V 196 - 197 -= Controlling top I/O LED = 198 - 199 -On the top row we have the following input/output devices in order from left to right; 200 - 201 -Left side: 202 - 203 -* physical lock 204 -* lock LED 205 -* warning/service button 206 -* warning/service LED 207 -* locate button 208 -* power LED (red & green) 209 -* fan LED (red & green) 210 -* temperature LED (red & green) 211 -* compute LED (unknown) 212 - 213 -Right side: 214 - 215 -* power LED (red & green) 216 -* fan LED (red & green) 217 -* temperature LED (red & green) 218 -* compute LED (unknown) 219 - 220 -Each side is driven by each their PCA9554 shift register. The registers represent the following LEDs: (Note that Lock LED is only present for the LEFT side) 221 - 222 -|=(% scope="row" %)Register|1|2|3|4|5|6|7 223 -|=Device|Power LED Green|Power LED Red|Fan LED Green|Fan LED Red|Temperature LED Green|Temperature LED Red|Lock LED 224 - 225 -To control each LED we shift either a 0 to turn off or 1 to turn on. Since each device shares a single red/green LED (power LED green & power LED red) setting both to 1 at the same time will always leave it red. That is when power LED green and power LED red are both enabled, red always takes precedence. 42 +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 226 226 ))) 227 227 228 228 ... ... @@ -237,12 +237,5 @@ 237 237 238 238 [[image:[email protected]]] 239 239 //Figure 2: [[Waves>>https://commons.wikimedia.org/wiki/File:Culebra_-_Playa_de_Flamenco.jpg]]// 240 - 241 - 242 - 243 - 244 - 245 - 246 - 247 247 ))) 248 248 )))
- xserve io main cable and PCB pinout.drawio.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.kevin - Size
-
... ... @@ -1,1 +1,0 @@ 1 -88.9 KB - Content
- xserve io main cable and PCB pinout.drawio.svg
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.kevin - Size
-
... ... @@ -1,1 +1,0 @@ 1 -83.3 KB - Content