找回密码
 立即注册
查看: 61|回复: 3

求助:ai8051u的i2c DMA 在读取最后一个字节后是否会自动发送nak

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2026-06-30 10:02:26
已绑定手机

1

主题

1

回帖

11

积分

新手上路

积分
11
发表于 7 天前 | 显示全部楼层 |阅读模式
如题:芯片手册没有提到是否会自动发送NAK,
但是按理说有计数器的情况下它应该是能自动发送的,
这样我就不用手动读取最后一字节并发送NAK干预了

截图202606281633537404.jpg
截图202606281634034139.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:299
  • 最近打卡:2026-07-04 00:01:55
已绑定手机

66

主题

808

回帖

3037

积分

论坛元老

DIY玩家

积分
3037
发表于 7 天前 | 显示全部楼层
手册没有描述
可能调整了相关设计
毕竟硬件IIC有关系到专利
永怀这学徒心
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:712
  • 最近打卡:2026-07-03 09:07:06
已绑定手机

50

主题

2691

回帖

9338

积分

论坛元老

积分
9338
发表于 6 天前 | 显示全部楼层
找个芯片测了一下,I2C使用DMA读完数据最后一个字节,是会自动发送NAK
截图202606291406161102.jpg

  1. void ReadNbyte(u8 addr, u8 number)   /*  WordAddress,First Data Address,Byte lenth   */
  2. {
  3.     while(I2CMSST & 0x80);    //检查I2C控制器忙碌状态
  4.     DMA_I2C_CR = 0x00;
  5.     I2CMSST = 0x00;
  6.     //发送起始信号+设备地址+写信号
  7.     I2CTXD = SLAW;
  8.     I2CMSCR = 0x09;
  9.     while ((I2CMSST & 0x40) == 0);
  10.     I2CMSST = 0x00;
  11.     //发送存储器地址
  12.     I2CTXD = addr;
  13.     I2CMSCR = 0x0a;
  14.     while ((I2CMSST & 0x40) == 0);
  15.     I2CMSST = 0x00;
  16.    
  17.     //发送起始信号+设备地址+读信号
  18.     I2CTXD = SLAR;
  19.     I2CMSCR = 0x09;
  20.     while ((I2CMSST & 0x40) == 0);
  21.     I2CMSST = 0x00;
  22.     DmaRxFlag = 1;
  23.     //触发数据读取命令
  24.     I2CMSCR = 0x8b;
  25.     DMA_I2C_CR = 0x01;
  26.     DMA_I2CR_AMT = number-1;    //设置传输总字节数(低8位):n+1
  27.     DMA_I2CR_AMTH = 0x00;       //设置传输总字节数(高8位):n+1
  28.     DMA_I2C_ST1 = number-1;     //设置需要传输字节数(低8位):number + 设备地址 + 存储地址
  29.     DMA_I2C_ST2 = 0x00;         //设置需要传输字节数(高8位):n+1
  30.     DMA_I2CR_CR |= 0x40;        //bit7 1:使能 I2CR_DMA, bit6 1:开始 I2CR_DMA, bit0 1:清除 FIFO
  31.     while(DmaRxFlag);           //DMA忙检测
  32.     DMA_I2C_CR = 0x00;
  33. }
复制代码
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2026-06-30 10:02:26
已绑定手机

1

主题

1

回帖

11

积分

新手上路

积分
11
发表于 5 天前 | 显示全部楼层
乘风*** 发表于 2026-6-29 14:07
找个芯片测了一下,I2C使用DMA读完数据最后一个字节,是会自动发送NAK

ok,感谢
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-7-5 07:47 , Processed in 0.069126 second(s), 61 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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