请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:BQ35100 您好!
我为不同的访问模式创建了一个状态机、但出于某种原因、我无法写入控制状态。
返回控制状态、无论我写入什么、始终提供值2080。
写入 DataFlash 的操作非常完美、例如、我可以更改配置 A。
void setSecurityMode (uint8_t setState){ uint8_t data[2]={0}; 枚举状态{ full_access、 未密封、 密封、 }; 枚举状态= setState; switch (state){ case full_access: DATA[1]= 0xFF; DATA[0]= 0xFF; 代尔马(300); I2cWriteBuffer(&I2C, 0xAA, 0x3e,数据,2); DATA[1]= 0xFF; DATA[0]= 0xFF; 代尔马(300); I2cWriteBuffer(&I2C, 0xAA, 0x3e,数据,2); 代尔马(300); 中断; 外壳未密封: DATA[0]= 0x04; 数据[1]= 0x14; 代尔马(300); I2cWriteBuffer(&I2C, 0xAA, 0x3e,数据,2); 数据[0]= 0x36; 数据[1]= 0x72; 代尔马(300); I2cWriteBuffer(&I2C, 0xAA, 0x3e,数据,2); 中断; 外壳密封: DATA[0]= 0x20;//密封子命令的第一个字节(0x20) DATA[1]= 0x00;//密封子命令的第二个字节(0x00)(寄存器地址将自动递增) I2cWriteBuffer(&I2C, 0xAA, 0x3E, DATA ,2); 代尔马女士(100); 中断; } }
读取控制状态:
void controlStatus()
{
uint8_t bufferRad[2]={0};
uint8_t bufferWrite[2]={0};
I2cSetAddrSize( I2C_ADDR_SIZE_8);
I2cWriteBuffer(&I2C, 0xAA, 0x00 , bufferWrite, 2);
代尔马女士(100);
I2cReadBuffer(&I2C, 0xAA, 0x00 , bufferRead, 2);
DelayMs(100);
}
因此、我了解了如何写入控制状态:
uint16_t controlSubCmd (uint16_t nSubCmd) { uint16_t nresult = 0; uint16_t pData[2]={0}; pData[0]= nSubCmd & 0xFF; pData[1]=(nSubCmd >> 8)和0xFF; 代尔马女士(100); I2cWriteBuffer (&I2C、0xAA、0x00、(uint8_t *) pData、2);//发出控制和子命令 代尔马女士(100); I2cReadBuffer (&I2C、0xAA、0x00、(uint8_t *) pData、2); //读取数据 代尔马女士(100); nresult=(pData[1]<<8)| pData[0]; 返回结果 ;}
但我仍然无法更改安全模式、即使在状态机内部替换了此命令...
