Nuvoton M032 i2c scanner kodu hk.

Başlatan MCansız, 29 Aralık 2022, 10:17:58

MCansız

Merhabalar

 Nuvoton m032SE geliştirme bordu ile denemeler yapıyorum. Öncelikle i2c için stm32f407-discovery kartında  i2c1 hattı üzerinde bulunan CS43L22 ses chipini hal kütüphanesi ile taratıp bulabiliyorum.

stm32 ile i2c tarama yaptığımda

arr[0] = 0x1A
arr[1] = 0x4A

adreslerini bulabiliyorum. ve bu değerler datasheet ile uyuşuyor.

stm32f hal kod:

int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_I2C1_Init();
HAL_GPIO_WritePin(Audio_RST_GPIO_Port, Audio_RST_Pin, GPIO_PIN_SET);
while (1)
{
memset(arr, 0, 10);
counter = 0;
for (int i = 1; i < 128; i++)
{
ret = HAL_I2C_IsDeviceReady(&hi2c1, (uint16_t) (i<<1), 3, 5);
if (ret != HAL_OK)
{
Buffer[i] = 0;
}
else if (ret == HAL_OK)
{
Buffer[i] = i;
arr[counter] = i;
counter++;
}
}
}
}

stm32 i2c pinlerinden arduinoya bağlantı yaptım arduino i2c scanner kodu (https://playground.arduino.cc/Main/I2cScanner ) ile aynı adresleri bulabiliyorum.

Amacım Nuvoton için bu olayı gerçekleştirmek. Nu-eclips ide aşağıdaki kodu yazdım.

i2c tarama yaptığımda

arr[0] = 0x25
arr[1] = 0x65

adreslerini bulabiliyorum. adresler neden uyuşmuyor.

nuvoton kod:

int ret;
char Buffer[300];
char arr[10];
char arr2[10];
int counter;
void System_Init(void)
{
/* Unlock protected registers */
SYS_UnlockReg();
Clock_Init();
Pin_Init();
Periph_Init();
/* Lock protected registers */
SYS_LockReg();
}
int32_t main(void)
{
System_Init();
while (1)
{
memset(arr, 0, 10);
counter = 0;
for (int i = 1; i < 128; i++)
{
ret = 0;
while (ret == 0)
{
static int ct = 0;
ret = I2C_ReadByte(I2C1, (uint16_t) (i<<1));
ct++;
if (ct > 5)
{
ct = 0;
break;
}
}
if (ret == 0)
{
Buffer[i] = 0;
}
else if (ret != 0)
{
Buffer[i] = i;
arr[counter] = i;
counter++;
}
}
}
}

Nuvotonda nerede yanlış yapıyorum. Yardımlarınız için teşekkür ederim.

MCansız

Problem cözümü olarak

ret = I2C_ReadByte(I2C1, (uint16_t) (i<<1));

yerine

ret = I2C_ReadByte(I2C1,  (i));

kullanmak gerekiyor burada slave adresi 7 bit kaydırılmamış olarak girilmeli. STM de kaydırılmış olarak giriliyordu

taramada sadece 0x4A ID bulabiliyorum 0x1A adresini bulamıyorum nedense

MCansız

Forumda pek nuvotona ilgi yok galiba