135***330
1.本人所用产品是RG5515的蓝牙芯片
2.使用的程序是GR551X_SDK V1.7.0下的peripheral_app\i2c\app_i2c
3.本人在和外设使用I2C通信时,GR5515始终为主机,外设始终为从机,主机想要通过I2C读取外设寄存器内容,要求时序如下
但是在从机返回REGDART之后,主机并没有给出ACK的信号,给的是NACK,并且在程序里面app_i2c_receive_sync函数也接收不到数组的内容。(使用同步方式)
此时对应示波器波形如下:在接收到0x01后,主机(gr5515没有应答)
完整读取时序如下:下图中0x01的部分展开后就是上图
4.程序设置如下:
#define MASTER_DEV_ADDR 0x4D
#define SLAVE_DEV_ADDR 0x55
#define DEFAULT_IO_CONFIG {{ APP_IO_TYPE_NORMAL, APP_IO_MUX_1, I2C_SCL_PIN, APP_IO_PULLUP },\
{ APP_IO_TYPE_NORMAL, APP_IO_MUX_1, I2C_SDA_PIN, APP_IO_PULLUP }}
#define DEFAULT_MODE_CONFIG { APP_I2C_TYPE_POLLING, DMA_Channel0, DMA_Channel1 }
#define DEFAULT_I2C_CONFIG { I2C_SPEED_100K, MASTER_DEV_ADDR, I2C_ADDRESSINGMODE_7BIT, I2C_GENERALCALL_DISABLE }
#define DEFAULT_PARAM_CONFIG { APP_I2C_ID_1, APP_I2C_ROLE_MASTER, DEFAULT_IO_CONFIG, DEFAULT_MODE_CONFIG, DEFAULT_I2C_CONFIG }
初始化:
app_i2c_params_t params_t = DEFAULT_PARAM_CONFIG;
params_t.use_mode.type = APP_I2C_TYPE_POLLING;
ret = app_i2c_init(¶ms_t, app_i2c_evt_handler);
函数调用:
ntag->tx_buffer[0] = NTAG_MEM_BLOCK_SESSION_REGS;
ntag->tx_buffer[1] = reg;
/* send block number */
uint16_t ret = app_i2c_transmit_sync(APP_I2C_ID_1, SLAVE_DEV_ADDR, ntag->tx_buffer, 2, 0xffff);
ntag->rx_buffer[0] = 0x00;
app_i2c_receive_sync(APP_I2C_ID_1, SLAVE_DEV_ADDR, ntag->rx_buffer, 1, 0xffff);
接收到的ntag_rx_buffer没有内容
请问是哪一个环节有问题?
zhongchengzhi
您好,app_i2c_receive_sync的返回值是多少呢?
打开微信,使用“扫一扫”即可关注