gdg.xxx 发表于 2025-2-27 08:44:13

32g iic波特率问题

请教一下各位大佬,我想使用全志t113与32g8k64进行iic通信,t113作为iic主机,stc32g8k64作为iic从机,但是通信没有成功。

目前看来好像是iic波特率不匹配的问题,于是我先是查看了t113的iic波特率是400khz,然后再查找stc芯片的iic波特率是多少,但是没有找到。

我是使用官方的《DMA-I2C从机中断模式与IO口模拟I2C主机进行自发自收》例程然后修改的iic从机代码,在代码中我没有找到iic波特率相关配置,然后翻数据手册也没有找到相关寄存器配置,不知道是不是我看漏了,想问问各位大佬iic波特率怎么看,怎么配置。


以下是例程中的一些iiic配置代码

void I2C_config(void)
{
    P_SW2 = (P_SW2 & ~(3<<4)) | (1<<4);   //IO口切换. 0: P1.4 P1.5, 1: P2.4 P2.5, 3: P3.3 P3.2

    I2CCFG = 0x80;                        //使能I2C从机模式
    I2CSLADR = 0x5a;                        //设置从机设备地址为5A
    I2CSLST = 0x00;
    I2CSLCR = ESTAI | ERXI | ETXI | ESTOI;//使能从机模式中断
}



void DMA_Config(void)
{
      DMA_I2CT_STA = 0x00;
      DMA_I2CT_CFG = 0x80;                //bit7 1:Enable Interrupt
      DMA_I2CT_AMT = 0xff;                //设置传输总字节数(低8位):n+1
      DMA_I2CT_AMTH = 0x00;                //设置传输总字节数(高8位):n+1
      DMA_I2CT_TXAH = (u8)((u16)&DmaBuffer >> 8);      //I2C发送数据存储地址
      DMA_I2CT_TXAL = (u8)((u16)&DmaBuffer);
      DMA_I2CT_CR = 0x80;                //bit7 1:使能 I2CT_DMA, bit6 1:开始 I2CT_DMA

      DMA_I2CR_STA = 0x00;
      DMA_I2CR_CFG = 0x80;                //bit7 1:Enable Interrupt
      DMA_I2CR_AMT = 0xff;                //设置传输总字节数(低8位):n+1
      DMA_I2CR_AMTH = 0x00;                //设置传输总字节数(高8位):n+1
      DMA_I2CR_RXAH = (u8)((u16)&DmaBuffer >> 8);      //I2C接收数据存储地址
      DMA_I2CR_RXAL = (u8)((u16)&DmaBuffer);
      DMA_I2CR_CR = 0x81;                //bit7 1:使能 I2CT_DMA, bit5 1:开始 I2CT_DMA, bit0 1:清除 FIFO

      DMA_I2C_ST1 = 0xff;                //设置需要传输字节数(低8位):n+1
      DMA_I2C_ST2 = 0x00;                //设置需要传输字节数(高8位):n+1
}



void I2C_Delay(void) //for normal MCS51, delay (2 * dly + 4) T, for STC12Cxxxx delay (4 * dly + 10) T
{
    u16dly;
    dly = MAIN_Fosc / 2000000UL;      //计算每次延时大约为5微秒
    while (--dly);
}


乘风飞扬 发表于 2025-2-27 09:15:23

I2C、SPI 作为从机时是不需要设置传输速度的,因为它们的CLK来源于主机。

gdg.xxx 发表于 2025-2-27 09:34:57

乘风飞扬 发表于 2025-2-27 09:15
I2C、SPI 作为从机时是不需要设置传输速度的,因为它们的CLK来源于主机。

哦哦谢谢,原来是这样,那就不是速率不匹配的问题了。

gdg.xxx 发表于 2025-2-27 09:36:19

我用逻辑分析仪抓了主机发的波形,主机发送4字节数据{0x00,0x10,0x20,0x40},结果波形是这样的,D7是sck线,D6是sda线,sck后面拉低了10ms,不知道为什么

gdg.xxx 发表于 2025-2-27 09:38:01

是我主机有问题么,请问各位大佬iic主机识别不到iic从机都有哪些常见的原因呀{:yun:}

Lkck8210 发表于 2025-2-27 12:00:16

gdg.xxx 发表于 2025-2-27 09:38
是我主机有问题么,请问各位大佬iic主机识别不到iic从机都有哪些常见的原因呀 ...

32G有返回Ack吗?

gdg.xxx 发表于 2025-2-27 13:51:37

Lkck8210 发表于 2025-2-27 12:00
32G有返回Ack吗?

有的,32g是正常的,有问题的是t113,现在情况是已经识别到32g作为的从机设备了,但是识别到的地址不对,我设置的是0x5a,结果t113获取到的设备地址是0x2d,我人蒙了{:fadai:}

yao眼的光 发表于 2025-2-27 14:21:53

【新提醒】部分较难问题需要帮忙分析的,可跟贴放上原帖链接通知我 | 新问题另外开贴 - 第10页 - C语言,汇编语言,Proteus MCU软件仿真 国芯技术交流网站 - AI32位8051交流社区https://www.stcaimcu.com/forum.php?mod=viewthread&tid=12065&extra=&page=10
可以在这版块93楼查看

DebugLab 发表于 2025-2-27 16:12:14

gdg.xxx 发表于 2025-2-27 13:51
有的,32g是正常的,有问题的是t113,现在情况是已经识别到32g作为的从机设备了,但是识别到的地址不对, ...

这是7位地址和8位地址的问题
7位地址不包括读/写位
8位地址包括读/写位


页: [1]
查看完整版本: 32g iic波特率问题