I2C 経由で温度センサーと通信しようとしています。これを行うには、Cortex M3 ベースのマイクロコントローラーを使用します。
だから私はモジュールのIDを取得して、すべてがうまく起動することを確認しようとしています。しかし、すでにそこで NAK を取得しています。
私の短いソフトウェアで何が間違っているのか誰か教えてもらえますか? ご覧のとおり、0x44 (これが必要です) が送信されます。しかし、私のMCは何らかの理由でNAKを送信します。また、受信したデータを印刷しようとすると、間違ったデータ (ほとんど 0) が印刷されます。
理由を知っている人はいますか?
void setupI2c()
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C7);
GPIOPinConfigure(0x00001002);
GPIOPinConfigure(0x00001402);
GPIOPinTypeI2C(GPIO_PORTA_BASE, GPIO_PIN_5);
GPIOPinTypeI2CSCL(GPIO_PORTA_BASE, GPIO_PIN_4);
}
void getModel()
{
int i=0;
int k;
int data[1]={0};
int g_ui32SysClock = SysCtlClockFreqSet((SYSCTL_OSC_MAIN | SYSCTL_XTAL_25MHZ | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_320), 40000000);
I2CMasterInitExpClk( I2C7Master_Base, g_ui32SysClock, false);
I2CMasterSlaveAddrSet(I2C7Master_Base, 0x29, false); //true = read
I2CMasterControl(I2C7Master_Base, I2C_MASTER_CMD_SINGLE_SEND);
I2CMasterDataPut(I2C7Master_Base, 0x80|0x12); // result register
while(I2CMasterBusy(I2C7Master_Base));
/******************************/
/*for(i=0;i<10000;i++)
{k++;}
*/
/******************************/
I2CMasterSlaveAddrSet(I2C7Master_Base, 0x29, true); //true = read
for(i=0;i<10000;i++)
{k--;}
I2CMasterControl(I2C7Master_Base, I2C_MASTER_CMD_SINGLE_RECEIVE);
data[0]=I2CMasterDataGet(I2C7Master_Base);
while(I2CMasterBusy(I2C7Master_Base));
UARTprintf(" model: %x\n", data[0]);
}