bviotkxt 发表于 2025-1-4 15:52:58

AI8H8K64U 读取PCF8563失败

事情是酱色儿的:

用Arduino Nano读取PCF8563默认情况下一切正常,
用TSSOP20的AI8H8K64U就不行,用的默认的P1.4, P1.5, 读到是乱码,且需要等待才会返回
然后用AI8G1K8 DIP16做了一个I2C SLAVE,8H是能够读到8G的正确数据,速度响应很快!
想到PCF8563最大速度是400KHz,所以按DataSheet把AI8H8K64U的I2CCFG也设置为匹配400Khz,甚至更低,但都不行,
这时没辙了,再把8G拿来试试做reader,结果竟然就可以了,400K的速度响应很快,一点问题没有。
8G和8H代码都是一样的,只是切换端口的部分不同,8H是用的默认,8G切了一下。
不知道还有什么B门。
{:yiwen:}

对了,I2C使能的内部上拉4.2K电阻,难道跟这个有关?


_奶咖君_ 发表于 2025-1-4 16:05:12

<p>码放上来瞅瞅?</p>

晓飛飛 发表于 2025-1-4 19:00:26

I2C使能的内部上拉4.2K电阻要配合准双向或者开漏输出模式,实测没有问题,另外I2C有多重端口映射,需要搞清楚在哪一组IO上,实在不行就把代码和原理图贴上来,大家分析下

wangxiangtan 发表于 2025-1-4 22:51:51

如果SDA、SCL两根线外面没有接4.7k上拉电阻到VCC的话,片子里面要使能上拉电阻,我用STC8H8K64U 读取AHT20温湿度模块的时候就是这样,电路上没接上拉电阻,死活通讯不上,内部使能上拉电阻后,顺利读取出来温度、湿度{:4_200:}

soma 发表于 2025-1-4 23:41:58

wangxiangtan 发表于 2025-1-4 22:51
如果SDA、SCL两根线外面没有接4.7k上拉电阻到VCC的话,片子里面要使能上拉电阻,我用STC8H8K64U 读取AHT20 ...

没上拉还读不出来,还会这样啊,看了模块电路图都是没上拉的,难道都要开内部上拉。

DebugLab 发表于 2025-1-5 10:17:08

soma 发表于 2025-1-4 23:41
没上拉还读不出来,还会这样啊,看了模块电路图都是没上拉的,难道都要开内部上拉。 ...

要开的,不然上升沿速度不够

bviotkxt 发表于 2025-1-5 18:27:37

花了两天终于知道原因了,猜测还是上拉的问题,检查DataSheet定义都没错,打开STCHX.h,发现一行注释:
//如下特殊功能寄存器位于扩展RAM区域
//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写
检查代码,原来初始化上拉刚好放到P_SW2设置之前了
8G可以是因为切换管脚,在库函数hardiic_init()之后进行了覆盖配置,也可以解释为啥8H读8G是正常,因为靠的8G的上拉。



又想到两个问题:
假如主从机都开启上拉,那岂不是相当于并联,电阻小了一半,有没啥影响呢?
这个P_SW2经常搞出问题,为何设计这么一个开关呢?(位于扩展RAM的原因?哪为啥要放到扩展RAM?)很多时候看示例代码都是直接打开也不关,有没有专家讲讲。

VCC 发表于 2025-1-5 18:41:08

bviotkxt 发表于 2025-1-5 18:27
花了两天终于知道原因了,猜测还是上拉的问题,检查DataSheet定义都没错,打开STCHX.h,发现一行注释:
// ...

哈哈哈哈,原来是这样啊

等于寄存器没配

soma 发表于 2025-1-5 19:48:29

bviotkxt 发表于 2025-1-5 18:27
花了两天终于知道原因了,猜测还是上拉的问题,检查DataSheet定义都没错,打开STCHX.h,发现一行注释:
// ...

估计寄存器太多了,只能部分放扩展RAM了。
页: [1]
查看完整版本: AI8H8K64U 读取PCF8563失败