我正在尝试通过 I2C 与温度传感器通信。为此,我使用基于 Cortex M3 的微控制器。
所以我试图获取模块的 id 以确保 evrything 启动良好。但已经在那里获得了 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]);
}