public bool iic_write(UInt16 addr, byte[] data, byte len) { byte data_temp = (byte)(addr & 0xFF); addr >>= 8; addr += (UInt16)(data_temp << 8); if (!hardware.iic_write(I2CAddr, addr, data, len)) { return false; } return true; }
时间: 2024-02-10 22:35:02 浏览: 48
这是一个名为 iic_write 的函数,其作用是向一个 I2C 设备写入数据。函数的参数包括一个 UInt16 类型的地址 addr,一个 byte 类型的数组 data,和一个表示数据长度的 byte 类型的 len。函数内部首先将 addr 变量的低 8 位取出来保存到 data_temp 中,然后将 addr 变量向右移动 8 位,并将 data_temp 左移 8 位,最后将二者相加,得到完整的地址。接着调用 hardware.iic_write 函数,将 I2C 地址和数据一起传入该函数。如果该函数返回 false,就代表写入失败,直接返回 false。否则返回 true。
相关问题
PCD_MIFARE_Transceive(byte *sendData, byte sendLen, bool acceptTimeout = false);
这看起来像是一段代码,可以看出其中包含了一个名为PCD_MIFARE_Transceive的函数。根据函数名中的MIFARE,可以猜测这是与MIFARE卡通信相关的函数。
sendData和sendLen参数可能用于指定要发送给MIFARE卡的数据和数据长度。acceptTimeout参数可能用于指定是否接受超时,即是否等待卡片响应直到超时。
public bool mtp_chip_erase(byte bks) { UInt32 timeout = 10000; byte[] write_data = new byte[9]; //write_data[1] = (byte)(bks << 7); write_data[3] = (byte)(bks << 7); if (bks > 0) { write_data[8] = 0x81; } else { write_data[8] = 0x01; } if (!iic_write(0xFE55, write_data, 8)) goto ERR; if (!iic_write(0xFE5D, write_data[8])) goto ERR; byte status = 0; while (timeout > 0) { timeout--; if (timeout < 10) { Console.WriteLine("timeout!"); goto ERR; } if (!mtp_read_status(ref status)) goto ERR; if ((status & 0x01) != 0x01) //busy done { break; } } return true; ERR: Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().Name + " FAILD!!!!!"); return false; }
这段代码看起来是一个函数,函数名为 mtp_chip_erase,它的作用是擦除一个 MTP 芯片。函数的参数是一个 byte 类型的变量 bks,表示要擦除哪个块。函数内部首先声明了一个 timeout 变量,表示最长等待时间。然后定义了一个长度为 9 的 byte 数组 write_data,其中第 3 个元素根据参数 bks 计算得到。接下来根据 bks 是否大于 0,给 write_data 数组的第 8 个元素赋不同的值。接着调用了 iic_write 函数,将 write_data 数组的前 8 个元素写到 0xFE55 地址上。然后又调用了 iic_write 函数,将 write_data 数组的第 8 个元素单独写到 0xFE5D 地址上。接下来进入了一个 while 循环,不断读取 MTP 芯片的状态,直到芯片不再忙碌,或者超时时间到达。如果超时了,就输出一条超时信息,并返回 false。否则返回 true。如果在函数内部的任意位置发生了错误,就输出一条错误信息,并返回 false。