切换到宽版
  • 2593阅读
  • 17回复

[C51]I2C通信请教-结贴 [复制链接]

上一主题 下一主题
离线飞向狙沙
 

发帖
13086
M币
7080
专家
48
粉丝
10374
只看楼主 倒序阅读 我要置顶 楼主  发表于: 2018-03-21
已经搞定,是我傻乎乎的把寄存器地址弄错了,手册读和写的时序图完全正确,等把led灯位完全测清楚之后发帖留念





从机械键盘上得到几个led矩阵控制芯片,查不到资料,猜测是IS31FL3731,根据3731的手册写了I2C的测试程序,写硬件地址后芯片应答正常,改成错误地址后应答异常,应该能确定硬件确实是IS31FL3731,但是接下来的写入数据控制led都应答正常,但是控制无效,尝试了读取功能寄存器数据,发现逻辑有点不清楚,几种可能都测试了读取结果都有问题。

下面是寄存器读取逻辑,软件翻译了一下贴上来看吧,翻译不准确。


读取得时序图


根据时序图写的测试代码(为了少占空间每个write后的应答检测去掉了),流程是
启动-硬件地址(写)-命令寄存器地址-应答寄存器地址-停止-启动-硬件地址(写)-命令寄存器地址-停止-启动-硬件地址(读)-读取-停止
这里我没搞清楚上面标红的应该是命令寄存器地址还是应答寄存器地址,都试过,正确结果应该是0x00,但实际写命令寄存器地址读取到的是上面写入的绿色字体的应答寄存器地址,就是说我写0x01就读到0x01,写02就读到02,如果写应答寄存器地址结果会读出来0xff。结果肯定都是不对的。


现在我没法确定到底是硬件挂了(键盘主控挂了,微热,已断开)还是代码有问题,又想不出来该怎么确认了,大家帮我看一下,下面贴上原文手册和我的测试代码,如果有需要哪部分翻译的我截图,网络翻译的能看不能下载
  1. //功能寄存器读取
  2. Start();
  3.     Write(0xe8);//硬件地址
  4.     Write(0x0b);//发送功能寄存器地址
  5. Write(0x01); //读取地址01
  6.     Stop();//重启
  7.     Start();
  8.     Write(0xe8);
  9.     Write(0x0b);//发送功能寄存器地址
  10.     Stop();
  11.     Start();
  12.     Write(0xe9);//硬件地址(读)
  13.     i=Read();
  14.     Stop();
手册下载链接:https://pan.baidu.com/s/1o-YZHZykJCVRe7Cek9UkyQ






[ 此帖被飞向狙沙在2018-03-27 13:36重新编辑 ]
本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
离线飞向狙沙

发帖
13086
M币
7080
专家
48
粉丝
10374
只看该作者 1楼 发表于: 2018-03-21
请登录后查看
离线ljlun

发帖
95166
M币
310026
专家
701
粉丝
19706
只看该作者 2楼 发表于: 2018-03-21
请登录后查看
本帖最近打赏记录:共1条打赏 ,M币+9
离线飞向狙沙

发帖
13086
M币
7080
专家
48
粉丝
10374
只看该作者 3楼 发表于: 2018-03-21
回 ljlun 的帖子
请登录后查看
离线飞向狙沙

发帖
13086
M币
7080
专家
48
粉丝
10374
只看该作者 4楼 发表于: 2018-03-21
请登录后查看
离线yanxue11

发帖
547
M币
4776
专家
9
粉丝
96
只看该作者 5楼 发表于: 2018-03-21
请登录后查看
本帖最近打赏记录:共1条打赏 ,M币+9
离线飞向狙沙

发帖
13086
M币
7080
专家
48
粉丝
10374
只看该作者 6楼 发表于: 2018-03-21
回 yanxue11 的帖子
请登录后查看
离线小茅

发帖
2304
M币
1611
专家
6
粉丝
40
只看该作者 7楼 发表于: 2018-03-21
请登录后查看
本帖最近打赏记录:共1条打赏 ,M币+5
离线bg4rff

发帖
1518
M币
1237
专家
8
粉丝
32
只看该作者 8楼 发表于: 2018-03-21
请登录后查看
本帖最近打赏记录:共1条打赏 ,M币+20
离线飞向狙沙

发帖
13086
M币
7080
专家
48
粉丝
10374
只看该作者 9楼 发表于: 2018-03-21
回 小茅 的帖子
请登录后查看
快速回复
限80 字节
温馨提示:欢迎交流讨论,请勿发布纯表情、纯引用等灌水帖子;以免被删除
 
上一个 下一个