private object Write_Store_Read_ChipReg(object writeData, byte length, bool isLittleendian, int regAddress, byte chipLine, byte chipset, ChipOperation operate) { lock (syncRoot) { byte[] writeDataArray = Algorithm.ObjectToByteArray(writeData, length, isLittleendian); EnterEngMode(DebugInterface.EngPage); if ((int)operate == 0)//写 { WriteDriver40g(TestPlanParaByPN.DUT_USB_Port, 0xA0, DebugInterface.StartAddress, regAddress, chipLine, chipset, writeDataArray, GlobalParaByPN.isOldDriver); } else if ((int)operate == 1)//存 { StoreDriver40g(TestPlanParaByPN.DUT_USB_Port, 0xA0, DebugInterface.StartAddress, regAddress, chipLine, chipset, writeDataArray, GlobalParaByPN.isOldDriver); } else if ((int)operate == 2) { byte[] readData = ReadDriver40g(TestPlanParaByPN.DUT_USB_Port, 0xA0, DebugInterface.StartAddress, regAddress, chipLine, chipset, length, GlobalParaByPN.isOldDriver); int returnData = 0; for (int i = readData.Length; i > 0; i--) { returnData += Convert.ToUInt16(readData[i - 1] * Math.Pow(256, length - i)); } return(returnData); } else { return(false); } return(true); } }
public override bool InitialChip(DUTCoeffControlByPN coeffControl, ChipDefaultValueByPN chipDefaultValue) { lock (syncRoot) { byte engpage = 0; int startaddr = 0; string filter = "ItemName = " + "'" + "DEBUGINTERFACE" + "'"; DataRow[] foundRows = coeffControl.Select(filter); if (foundRows == null) { Log.SaveLogToTxt("There is no debug interface."); } else if (foundRows.Length > 1) { Log.SaveLogToTxt("Count of debug interface is more than 1"); } else { engpage = Convert.ToByte(foundRows[0]["Page"]); startaddr = Convert.ToInt32(foundRows[0]["StartAddress"]); } if (chipDefaultValue == null) { return(true); } for (int row = 0; row < chipDefaultValue.Rows.Count; row++) { if (Convert.ToInt32(chipDefaultValue.Rows[row]["Length"]) == 0) { continue; } byte length = Convert.ToByte(chipDefaultValue.Rows[row]["Length"]); bool isLittleendian = Convert.ToBoolean(chipDefaultValue.Rows[row]["Endianness"]); var inputdata = chipDefaultValue.Rows[row]["ItemValue"]; byte[] writeData = Algorithm.ObjectToByteArray(inputdata, length, isLittleendian); byte driveTpye = Convert.ToByte(chipDefaultValue.Rows[row]["DriverType"]); byte chipset = 0x01; switch (driveTpye) { case 0: chipset = 0x01; break; case 1: chipset = 0x02; break; case 2: chipset = 0x04; break; case 3: chipset = 0x08; break; default: chipset = 0x01; break; } EnterEngMode(engpage); int registerAddress = Convert.ToInt32(chipDefaultValue.Rows[row]["RegisterAddress"]); byte chipLine = Convert.ToByte(chipDefaultValue.Rows[row]["ChipLine"]); int k = 0; for (k = 0; k < 3; k++) { WriteDriver40g(TestPlanParaByPN.DUT_USB_Port, 0xA0, startaddr, registerAddress, chipLine, chipset, writeData, GlobalParaByPN.isOldDriver); // Thread.Sleep(200); StoreDriver40g(TestPlanParaByPN.DUT_USB_Port, 0xA0, startaddr, registerAddress, chipLine, chipset, writeData, GlobalParaByPN.isOldDriver); // Thread.Sleep(200); byte[] temp = new byte[length]; temp = ReadDriver40g(TestPlanParaByPN.DUT_USB_Port, 0xA0, startaddr, registerAddress, chipLine, chipset, length, GlobalParaByPN.isOldDriver); if (BitConverter.ToString(temp) == BitConverter.ToString(writeData)) { break; } } if (k >= 3) { return(false); } } return(false); } }