📄 sff8472_table.c
字号:
// sff8472_table.c
#include "common.h"
void sff8472_table(void)
{
/////////////////////////////////////////////////////////////////////
// 2-wire address A2h //
/////////////////////////////////////////////////////////////////////
A0h[0] = 0x03;
A0h[1] = 0x04;
A0h[2] = 0x07;
A0h[3] = 0x00;
A0h[4] = 0x01;
A0h[5] = 0x00;
A0h[6] = 0x00;
A0h[7] = 0x00;
#if DEBUG == 1
A0h[0] = 0x00;
A0h[1] = 0x11;
A0h[2] = 0x22;
A0h[3] = 0x33;
A0h[4] = 0x44;
A0h[5] = 0x55;
A0h[6] = 0x66;
A0h[7] = 0x77;
#endif
A0h[8] = 0x02;
A0h[9] = 0x00;
A0h[10] = 0x00;
A0h[11] = 0x03;
A0h[12] = 0x19;
A0h[13] = 0x00;
A0h[14] = 0x02; A0h[15] = 0x14;
A0h[16] = 0x00; A0h[17] = 0x00;
A0h[18] = 0x00; A0h[19] = 0x00;
A0h[20] = 0x41; A0h[21] = 0x44; // Vendor Name
A0h[22] = 0x49; A0h[23] = 0x20;
A0h[24] = 0x20; A0h[25] = 0x20;
A0h[26] = 0x20; A0h[27] = 0x20;
A0h[28] = 0x20; A0h[29] = 0x20;
A0h[30] = 0x20; A0h[31] = 0x20;
A0h[32] = 0x20; A0h[33] = 0x20;
A0h[34] = 0x20; A0h[35] = 0x20;
A0h[36] = 0x00; A0h[37] = 0x00;
A0h[38] = 0x00; A0h[39] = 0x00;
A0h[40] = 0x41; A0h[41] = 0x44; // Vendor PM
A0h[42] = 0x75; A0h[43] = 0x43;
A0h[44] = 0x37; A0h[45] = 0x30;
A0h[46] = 0x32; A0h[47] = 0x30;
A0h[48] = 0x2D; A0h[49] = 0x53;
A0h[50] = 0x46; A0h[51] = 0x50;
A0h[52] = 0x2D; A0h[53] = 0x52;
A0h[54] = 0x44; A0h[55] = 0x4B;
A0h[56] = 0x31; A0h[57] = 0x2E; // Vendor Rev
A0h[58] = 0x30; A0h[59] = 0x30; // Vendor Rev
A0h[60] = 0x00; A0h[61] = 0x00;
A0h[62] = 0x00; A0h[63] = 0x00;
A0h[64] = 0x00; A0h[65] = 0x1A;
A0h[66] = 0x00; A0h[67] = 0x00;
A0h[68] = 0x00; A0h[69] = 0x00;
A0h[70] = 0x00; A0h[71] = 0x00;
A0h[72] = 0x00; A0h[73] = 0x00;
A0h[74] = 0x00; A0h[75] = 0x00;
A0h[76] = 0x00; A0h[77] = 0x00;
A0h[78] = 0x00; A0h[79] = 0x00;
A0h[80] = 0x00; A0h[81] = 0x00;
A0h[82] = 0x00; A0h[83] = 0x00;
A0h[84] = 0x30; A0h[85] = 0x33; // Date Code
A0h[86] = 0x31; A0h[87] = 0x32;
A0h[88] = 0x30; A0h[89] = 0x38;
A0h[90] = 0x7F; A0h[91] = 0x7F;
A0h[92] = 0x68; A0h[93] = 0xF0;
A0h[94] = 0x01; A0h[95] = 0x00;
// Vendor EEPROM
A0h[96] = 0x31; A0h[97] = 0x2E; // Firmware revision
A0h[98] = 0x37; A0h[99] = 0x30;
A0h[100] = 0x31; A0h[101] = 0x2E; // Module PCB revision
A0h[102] = 0x33; A0h[103] = 0x30;
A0h[104] = 0x00; A0h[105] = 0x00; // Host PCB revision
A0h[106] = 0x00; A0h[107] = 0x00;
A0h[108] = 0x00; A0h[119] = 0x00;
A0h[110] = 0x00; A0h[111] = 0x00;
A0h[112] = 0x00; A0h[113] = 0x00;
A0h[114] = 0x00; A0h[115] = 0x00;
A0h[116] = 0x00; A0h[117] = 0x00;
A0h[118] = 0x00; A0h[119] = 0x00;
A0h[120] = 0x00; A0h[121] = 0x00;
A0h[122] = 0x00; A0h[123] = 0x00;
A0h[124] = 0x00; A0h[125] = 0x00;
A0h[126] = 0x00; A0h[127] = 0x00;
/////////////////////////////////////////////////////////////////////
// 2-wire address A2h //
/////////////////////////////////////////////////////////////////////
// alarm/warning thresholds
A2h[0] = 0x46; A2h[1] = 0x00; // Temp High Alarm, 70degC
A2h[2] = 0x00; A2h[3] = 0x00; // Temp Low Alarm, 0degC
A2h[4] = 0x3C; A2h[5] = 0x00; // Temp High Warning, 60degC
A2h[6] = 0x0A; A2h[7] = 0x00; // Temp Low Warning, 10degC
A2h[8] = 0x8C; A2h[9] = 0xA0; // Voltage High Alarm, 3.6V
A2h[10] = 0x79; A2h[11] = 0x18; // Voltage Low Alarm, 3.0V
A2h[12] = 0x84; A2h[13] = 0xD0; // Voltage High Warning, 3.4V
A2h[14] = 0x7D; A2h[15] = 0x00; // Voltage Low Warning, 3.2V
A2h[16] = 0xAF; A2h[17] = 0xC8; // Bias High Alarm, 90mA
A2h[18] = 0x3A; A2h[19] = 0x98; // Bias Low Alarm, 30mA
A2h[20] = 0x9C; A2h[21] = 0x40; // Bias High Warning, 80mA
A2h[22] = 0x4E; A2h[23] = 0x20; // Bias Low Warning, 40mA
A2h[24] = 0x9C; A2h[25] = 0x40; // Tx Power High Alarm, 4mW
A2h[26] = 0x03; A2h[27] = 0xE8; // Tx Power Low Alarm, 0.1mW
A2h[28] = 0x88; A2h[29] = 0xB8; // Tx Power High Warning, 3.5mW
A2h[30] = 0x13; A2h[31] = 0x88; // Tx Power Low Warning, 0.5mW
A2h[32] = 0x27; A2h[33] = 0x10; // Rx Power High Alarm, 1mW
A2h[34] = 0x00; A2h[35] = 0x64; // Rx Power Low Alarm, 0.01mW
A2h[36] = 0x13; A2h[37] = 0x88; // Rx Power High Waring, 0.5mW
A2h[38] = 0x00; A2h[39] = 0xC8; // Rx Power Low Warning, 0.02mW
// reserved 40 to 55
A2h[40] = 0x00; A2h[41] = 0x00;
A2h[42] = 0x00; A2h[43] = 0x00;
A2h[44] = 0x00; A2h[45] = 0x00;
A2h[46] = 0x00; A2h[47] = 0x00;
A2h[48] = 0x00; A2h[49] = 0x00;
A2h[50] = 0x00; A2h[51] = 0x00;
A2h[52] = 0x00; A2h[53] = 0x00;
A2h[54] = 0x00; A2h[55] = 0x00;
// external colibration constants
A2h[56] = 0x01; A2h[57] = 0x01;
A2h[58] = 0x19; A2h[59] = 0xB4;
A2h[60] = 0x64; A2h[61] = 0x00;
A2h[62] = 0x00; A2h[63] = 0x00;
A2h[64] = 0x00; A2h[65] = 0x00;
A2h[66] = 0x00; A2h[67] = 0x00;
A2h[68] = 0x00; A2h[69] = 0x00;
A2h[70] = 0x00; A2h[71] = 0x00;
A2h[72] = 0x00; A2h[73] = 0x00;
A2h[74] = 0x00; A2h[75] = 0x00;
A2h[76] = 0x00; A2h[77] = 0x00;
A2h[78] = 0x00; A2h[79] = 0x00;
A2h[80] = 0x00; A2h[81] = 0x00;
A2h[82] = 0x00; A2h[83] = 0x00;
A2h[84] = 0x00; A2h[85] = 0x00;
A2h[86] = 0x00; A2h[87] = 0x00;
A2h[88] = 0x00; A2h[89] = 0x00;
A2h[90] = 0x00; A2h[91] = 0x00;
A2h[92] = 0x00; A2h[93] = 0x00;
A2h[94] = 0x00;
// checksum byte0-94
A2h[95] = 0x00;
// monitor results
A2h[96] = 0x00; A2h[97] = 0x00; // Temperature Mon
A2h[98] = 0x00; A2h[99] = 0x00; // Voltage Mon
A2h[100] = 0x00; A2h[101] = 0x00; // Tx Bias Mon
A2h[102] = 0x00; A2h[103] = 0x00; // Tx Power Mon
A2h[104] = 0x00; A2h[105] = 0x00; // Rx Power Mon
// reserved
A2h[106] = 0x00; A2h[107] = 0x00;
A2h[108] = 0x00; A2h[109] = 0x00;
// status/control bits
A2h[110] = 0x01;
// reserved
A2h[111] = 0x00;
// alarm flags
A2h[112] = 0x00; // Alarm Flags
A2h[113] = 0x00; // Alarm Flags
// reserved
A2h[114] = 0x00; A2h[115] = 0x00;
// warning flags
A2h[116] = 0x00;
A2h[117] = 0x00;
// reserved
A2h[118] = 0x00; A2h[119] = 0x00;
// vendor specific (ADI reserved)
A2h[120] = 0x00; A2h[121] = 0x00; // Tx Mod Mon
A2h[122] = 0x17; A2h[123] = 0x70; // Reference Tx Power, 0.6mW, 1LSB=0.1uW
A2h[124] = 0x10; A2h[125] = 0x2C; // Reference Impd current, 414uA, 1LSB=0.1uA
A2h[126] = 0x5A; // Photo Diode Responsivity, 0.90A/W, 1LSB=0.01[A/W]
A2h[127] = 0x00;
// user eeprom
A2h[128] = 0x00; // Flash update counter
A2h[129] = 0x00; // Force Flash update enable resister
A2h[130] = 0x00; // Flash initialize enable resister
A2h[131] = 0x00; // Tx Power monitor enable resister
A2h[132] = 0x00; // ER compensation enable resister
A2h[132] = 0x00;
A2h[133] = 0x00;
A2h[134] = 0x00;
A2h[135] = 0x00;
A2h[136] = 0x00;
A2h[137] = 0x00;
A2h[138] = 0x00;
A2h[139] = 0x00;
A2h[140] = 0x00;
A2h[141] = 0x00;
A2h[142] = 0x00;
A2h[143] = 0x00;
A2h[144] = 0x00;
A2h[145] = 0x00;
A2h[146] = 0x00;
A2h[147] = 0x00;
A2h[148] = 0x00;
A2h[149] = 0x00;
A2h[150] = 0x00;
// vendor specific (ADI reserved)
A2h[248] = 0x02; A2h[249] = 0x80; // PAV set, 0x000 to 0xFFF
A2h[250] = 0x02; A2h[251] = 0x80; // ER set, 0x000 to 0xFFF
A2h[252] = 0x19; A2h[253] = 0x00; // Ref_Temp, 1/256degC/LSB
A2h[254] = 0x04; A2h[255] = 0xFE; // Ref_ADCDAT, 0x000 to 0xFFF
}
/********************************************************************/
/* */
/* Checksum */
/* */
/********************************************************************/
void Checksum(BYTE cc_range){
HALFWORD sum=0;
BYTE i;
switch(cc_range){
case 1:
for(i=0; i<63; i++){ // sum byte 0 to 62
sum += A0h[i];
}
A0h[63] = (BYTE)(sum & 0x00FF);
break;
case 2:
for(i=64; i<95; i++){ // sum byte 64 to 94
sum += A0h[i];
}
A0h[95] = (BYTE)(sum & 0x00FF);
break;
case 3:
for(i=0; i<95; i++){ // sum byte 0 to 94
sum += A2h[i];
}
A2h[95] = (BYTE)(sum & 0x00FF);
break;
}
}
/********************************************************************/
/* */
/* Write Protect */
/* */
/********************************************************************/
BYTE WriteProtect(BYTE i2c_addr, BYTE byte_addr){
BYTE res=0;
// A0 bank
if(i2c_addr == 0xA0){
res=0;
}
// A2 bank
if(i2c_addr == 0xA2){
if(0x5F<byte_addr && byte_addr<0x7A) res=1;
else res=0;
}
return res;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -