【平头哥杯】wujian100 进行 IIC 库函数逻辑

问答 ⋅ 于 2021-05-13 17:09:49 ⋅ 133 阅读

目前了解到,一般的IIC的通讯逻辑为,

向器件写数据:主机发送从机地址(7位地址左移1位)+写(1位),再发送要读写的地址,然后继续发要写的数据;

从器件读数据:主机发送从机地址(7位地址左移1位)+写(1位),再发送要读的地址;主机发送从机地址(7位地址左移1位)+读(1位),然后接收数据就好了;

无剑100的IIC库函数中已知有csi_iic_master_send()csi_iic_master_receive()。但在例程中,似乎没有体现出读/写IIC设备的命令是如何发出的?

官方例程内容

在官方例程中,已知有定义:
file

该过程似乎是向EEPROM中写入数值
file

而接下来的两步似乎是向从机发送要读的地址,和读取多少数据的命令

file

file

至此,官方例程应当是完成了向EEPROM写数据和读数据的过程,但上述程序中似乎没有提到IIC的读/写操作。

【问1】:IIC的写操作是默认在csi_iic_master_send()函数中吗?

【问2】:发送的数据(read_data/write_data)中,没有EEPROM的定义的IIC地址0x50,不过csi_iic_master_send()函数中有添加器件地址的参数,所以在read_data/write_data中不必再添加器件地址,在其第二个函数参数处输入期间地址即可与对应IIC从机通信?

file

【问3】:如上解释合理的话,那么,我向器件地址为IIC_ADDRESS的传感器寄存器R1中写入一个数wdata,并从该传感器的寄存器R2中读取一个数rdata。程序是不是应该为:

file

库函数

以上只是在猜测两个函数的功能,要知道其真正用法,应当去查看库函数定义。但…库函数定义看不太懂,而且似乎也未找到读/写相关的代码。另外:
在文件wj_usi_iic.cdrv_usi_iic_master_send()定义中,有两次发送数据与0x200相或的操作:

file

【问4】:请问这里是什么含义?

问题比较多,有劳解答了,谢谢!

成为第一个点赞的人吧 :bowtie:
回复数量: 0
    暂无评论~~
    • 请注意单词拼写,以及中英文排版,参考此页
    • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
    • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
    • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
    • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
    Ctrl+Enter