完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
你好,我正在尝试在 Cypress FX3 上执行读取操作。
void MINI640read(void) { CyU3PReturnStatus_t apiRetStatus = CY_U3P_SUCCESS; CyU3PI2cPreamble_t preamble; mini640VdcmdData_t cmdData; mini640CmdSts_t cmdSts; uint8_t retData[32]; int retryCnt = 0; CyU3PI2cError_t error_p; /**< Return pointer to be filled with the error code. */ CyU3PDebugPrinttime(4, "Trying to access I2C"); //1) send /* Set the parameters for the I2C API access and then call the write API. */ preamble.buffer[0] = MINI640_ADDR_WR; preamble.buffer[1] = MINI640_VDCMD_BUF_ADDR >> 8; preamble.buffer[2] = MINI640_VDCMD_BUF_ADDR &0xFF; preamble.length = 3; /* Three byte preamble. */ preamble.ctrlMask = 0x0000; /* No additional start and stop bits. */ memcpy(cmdData.data, mini640_Get_SN, sizeof(mini640_Get_SN)); apiRetStatus = CyU3PI2cTransmitBytes (&preamble, cmdData.data, 18, 0); if (apiRetStatus != CY_U3P_SUCCESS) { CyU3PDebugPrintTime(4, "CyU3PI2cTransmitBytes fail"); CyU3PDebugPrintTime(4, "retCode: %d", apiRetStatus); //CyFxAppErrorHandler (apiRetStatus); } //2) verify command execution do { if (retryCnt++ > 10) return; CyU3PThreadSleep(10); cmdSts.data[0] = 1; preamble.buffer[0] = MINI640_ADDR_WR; preamble.buffer[1] = MINI640_CMD_STS_ADDR >> 8; preamble.buffer[2] = MINI640_CMD_STS_ADDR & 0xFF; preamble.buffer[3] = MINI640_ADDR_RD; preamble.length = 4; preamble.ctrlMask = 0x0004; /* Send start bit after third byte of preamble. */ apiRetStatus = CyU3PI2cReceiveBytes (&preamble, cmdSts.data, 1, 0); if (apiRetStatus != CY_U3P_SUCCESS) { CyU3PI2cGetErrorCode (&error_p); CyU3PDebugPrintTime(4, "CyU3PI2cReceiveBytes1 fail"); CyU3PDebugPrintTime(4, "retCode: %d", apiRetStatus); CyU3PDebugPrintTime(4, "error_p: %d", error_p); //CyFxAppErrorHandler (apiRetStatus); return; //continue; } else { CyU3PDebugPrintTime(4, "cmdSts.data[0]: 0x%x", cmdSts.data[0]); } } while (cmdSts.data[0] != 0); CyU3PDebugPrintTime(4, "cmdData.field.paraLen: %d", cmdData.field.paraLen); //3) read result preamble.buffer[0] = MINI640_ADDR_WR; preamble.buffer[1] = MINI640_VDCMD_BUF_ADDR >> 8; preamble.buffer[2] = MINI640_VDCMD_BUF_ADDR & 0xFF; preamble.buffer[3] = MINI640_ADDR_RD; preamble.length = 4; preamble.ctrlMask = 0x0004; memset(retData, 0, cmdData.field.paraLen); apiRetStatus = CyU3PI2cReceiveBytes (&preamble, retData, cmdData.field.paraLen, 0); if (apiRetStatus != CY_U3P_SUCCESS) { CyU3PDebugPrintTime(4, "CyU3PI2cReceiveBytes2 fail"); CyU3PDebugPrintTime(4, "retCode: %d", apiRetStatus); //CyFxAppErrorHandler (apiRetStatus); } CyU3PDebugPrintTime(4, "SN: %s", retData);} 它失败了,附加的逻辑分析仪显示缺少重复的启动和停止操作。 什么原因可能导致这种行为? |
|
相关推荐
1个回答
|
|
|
在 Cypress FX3 的 I2C 通信中, 1. 传输模式配置错误
2. 未正确使用 Preamble
3. 停止条件未触发
4. 时钟速度或超时配置
5. 代码示例(修复后)6. 其他调试建议
如果问题仍然存在,请提供逻辑分析仪抓取的波形图,以便进一步分析时序问题。 |
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2374 浏览 0 评论
1426 浏览 0 评论
1877 浏览 0 评论
CYUSB3014烧录失败Cypress Benicia USB Boot Device
7871 浏览 1 评论
11295 浏览 0 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 01:37 , Processed in 0.603587 second(s), Total 72, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
4454