完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我的应用是ESP32S2作SPI从机,通过FPGA给ESP32S2传输数据,一直传输,时钟为20MHZ,一次传输长度为1024BYTE,配置如下:
#define GPIO_MOSI GPIO_NUM_11 #define GPIO_MISO GPIO_NUM_13 #define GPIO_SCLK GPIO_NUM_12 #define GPIO_CS GPIO_NUM_10 #define RCV_HOST SPI3_HOST #define DMA_CHAN RCV_HOST spi_bus_config_t buscfg={ .mosi_io_num=GPIO_MOSI, .miso_io_num=GPIO_MISO, .sclk_io_num=GPIO_SCLK, .quadwp_io_num = -1, .quadhd_io_num = -1, }; spi_slave_interface_config_t slvcfg={ .mode=0, .spics_io_num=GPIO_CS, .queue_size=3, .flags=0, .post_setup_cb=my_post_setup_cb, .post_trans_cb=my_post_trans_cb }; gpio_set_pull_mode(GPIO_MOSI, GPIO_PULLDOWN_ONLY); gpio_set_pull_mode(GPIO_SCLK, GPIO_PULLDOWN_ONLY); gpio_set_pull_mode(GPIO_CS, GPIO_PULLUP_ONLY); //Initialize SPI slave interface spi_slave_initialize(RCV_HOST, &buscfg, &slvcfg, DMA_CHAN); uint8_t cam_buf[1024]=""; uint8_t cam_buf2[1024]=""; int len = 1024*8; spi_slave_transaction_t spi_recv; spi_recv.length=len; spi_recv.tx_buffer=cam_buf2; spi_recv.rx_buffer=cam_buf; gpio_set_level(ESP_RDY, 1); 配置完成后,在任务中循环执行 spi_slave_transmit(RCV_HOST, &spi_recv, portMAX_DELAY); printf("rcv_size:%sn",cam_buf); 另外: void my_post_setup_cb(spi_slave_transaction_t *trans) { gpio_set_level(ESP_RDY, 1); } void my_post_trans_cb(spi_slave_transaction_t *trans) { gpio_set_level(ESP_RDY, 0); } FPGA那边发送数据正常,示波器测量波形正常,为什么打印出来的数据全部是0,这里面是哪个地方设置错了吗? 还有,CS的周期是550ns,1024个字节的话应该是550us左右才对,示波器测量到的ESP_RDY的周期有时候会连续很多个是28us,这个是什么意思呢? |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
1132 浏览 1 评论
576浏览 6评论
477浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
461浏览 5评论
462浏览 4评论
435浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 01:32 , Processed in 0.801425 second(s), Total 74, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号