硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4567|回复: 5
收起左侧

[有问必答] 关于24C04,DMA发送和接收问题

[复制链接]

7

主题

13

回帖

34

积分

新手上路

积分
34
发表于 2021-4-19 18:29:26 | 显示全部楼层 |阅读模式
设备从地址是0xA0,程序上确认没给错,但用示波器查看发出的却是0x40,怎么也改不了,咋回事?
回复

使用道具 举报

7

主题

13

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2021-4-19 18:36:42 | 显示全部楼层
使用了KEIL MDK5.34的CMSIS_driver驱动,并采用了DMA传送,在RTE-Devic.h中选择相应的接口并打开DMA允许,引脚初始化等应该也没有问题。程序一运行后观察I2C总线波形发现只发出了第一帧数据,应该是从设备的地址,程序中为0xA0,但不知为何从波形上看是0x40,所以从机不发ACK信号为高电平,导致后续读数据无法进行。请有经验的指点。
回复

使用道具 举报

7

主题

13

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2021-4-19 18:57:30 | 显示全部楼层
7-bit slave address 难道是7位从地址造成,而24c04的设备地址是0xa0,是8位了?
回复

使用道具 举报

7

主题

13

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2021-4-19 19:16:23 | 显示全部楼层
可能是原先寄存器写的驱动与采用系统自带驱动的定义不一致造成,本身就是7位地址,地址就应该是0x50就可。最后一位读写位由程序自动加入才对。用0xA0作为从地址本身可能就不对。明天试一下,手边没有daplnk,无法测试。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106904
QQ
发表于 2021-4-20 08:33:55 | 显示全部楼层
Zhangjc5101 发表于 2021-4-19 18:57
7-bit slave address 难道是7位从地址造成,而24c04的设备地址是0xa0,是8位了?

没用过硬件I2C。

AT24C04的话,是8bit地址,其中bit1可设置

回复

使用道具 举报

7

主题

13

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2021-4-22 14:10:20 | 显示全部楼层
由于CMSIS DRIVER中的将发送和接收从地址后的设备子地址直接取消了,造成读24C04没问题,写入无法按页写方式完成,只好重新用FSL_i2c_dma.c驱动程序重新构建,实现了硬件DMA方式一次性写入256个字节到24C04中和一次性读出256字节,当然主要是要按24C04页写逻辑要求进行才行。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-9 10:50 , Processed in 0.265119 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表