完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
CH2601的内部设计有IIC总线,板子上的I2C总线与ES7210连接,ES7210芯片是四通道ADC采集芯片,在板子上连接了硅麦, ES7210的数据是通过I2S总线连接的CH2601,芯片的配置是通过IIC连接到CH2601的,I2S是音频数据的传输通道。开始打算使用IIC读取ES7210的配置信息,但是手头没有ES7210的资料,也就没有办法测试了。于是就只有把跳线取下来这一办法了。也就是J1的[3,4],[5,6]两根跳线就可以。 板子的接线图 PA8和PA9这两条跳线就可以,我同时将这两条线接到了适配器上用来观察波形。 程序的引用文件 #include "drv/iic.h" #include 程序的步骤 1、打开引脚功能,csi_pin_set_mux(PA8, PA8_IIC0_SCL); 2、初始化端口,ret = csi_iic_init(&master_iic, IIC_IDX);端口 0 3、配置IIC为主模式,ret = csi_iic_mode(&master_iic, IIC_MODE_MASTER); 4、配置设备地址,ret = csi_iic_addr_mode(&master_iic, IIC_ADDRESS_7BIT); 5、设置IIC总线速度,ret = csi_iic_speed(&master_iic, IIC_BUS_SPEED_STANDARD); 6、发送数据,num = csi_iic_master_send(&master_iic, IIC_SLAVE_ADDR, write_data, sizeof(write_data), 100000); 7、接收数据,num = csi_iic_master_receive(&master_iic, IIC_SLAVE_ADDR, read_data, sizeof(read_data), 100000); #include "drv/iic.h" #include #define IIC_SLAVE_ADDR 0x50 #define IIC_IDX 0 static csi_iic_t master_iic; int example_iic(void) { uint8_t write_data[10]; uint8_t read_data[10]; csi_error_t ret; uint32_t i; int32_t num; csi_pin_set_mux(PA8, PA8_IIC0_SCL); csi_pin_set_mux(PA9, PA9_IIC0_SDA); ret = csi_iic_init(&master_iic, IIC_IDX); if (ret != CSI_OK) { printf("csi_iic_initialize errorn"); return -1; } /* config iic master mode */ ret = csi_iic_mode(&master_iic, IIC_MODE_MASTER); if (ret != CSI_OK) { printf("csi_iic_set_mode errorn"); return -1; } /* config iic 7bit address mode */ ret = csi_iic_addr_mode(&master_iic, IIC_ADDRESS_7BIT); if (ret != CSI_OK) { printf("csi_iic_set_addr_mode errorn"); return -1; } /* config iic standard speed*/ ret = csi_iic_speed(&master_iic, IIC_BUS_SPEED_STANDARD); if (ret != CSI_OK) { printf("csi_iic_set_speed errorn"); return -1; } for (i = 0; i < sizeof(write_data); i++) { write_data = i; ///< init write_data value } num = csi_iic_master_send(&master_iic, IIC_SLAVE_ADDR, write_data, sizeof(write_data), 100000); if (num != sizeof(write_data)) { printf("csi_iic_master_send errorn"); return -1; } num = csi_iic_master_receive(&master_iic, IIC_SLAVE_ADDR, read_data, sizeof(read_data), 100000); if (num != sizeof(read_data)) { printf("csi_iic_master_receive errorn"); return -1; } csi_iic_uninit(&master_iic); return 0; } 我在主程序中调用了测试函数 int main(void) { board_yoc_init(); example_iic(); LOGD(TAG, "%sn", aos_get_app_version()); oled_init(); while (1) { LOGD(TAG, "Hello world! YoC"); aos_msleep(1000); } return 0; } 我使用了示波器,看到有脉冲输出,但是不知道为什么程序一直都在num = csi_iic_master_send(&master_iic, IIC_SLAVE_ADDR, write_data, sizeof(write_data), 100000);函数中出不来, 而且超时机制有没有起作用。可以看到函数中有while(1)这样的循环语句。猜测:可能原因是没有接入设备,没有ACK信号的原因吧! 文章转载自:平头哥芯片开放社区 作者:bigbat |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
【平头哥Sipeed LicheeRV 86开发板试用体验】Waft初体验
15737 浏览 1 评论
13790 浏览 4 评论
【平头哥Sipeed LicheeRV 86开发板试用体验】四、烧写waft系统&搭建waft测试环境
19706 浏览 2 评论
59191 浏览 19 评论
【限时福利】加入芯片开发社区,领100G电子工程师资料大礼包
88410 浏览 121 评论
邀请函 | 3月2日 来上海参加平头哥“玄铁RISC-V生态大会”
814浏览 0评论
读书分享会 | 玄铁RISC-V处理器入门与实战电子书免费下载!
714浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-13 03:52 , Processed in 0.378413 second(s), Total 37, Slave 32 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号