完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛扫一扫,分享给好友
|
各位大侠,早上好:
根据上面的帖子的原理图,我想实现一个gpmc与nandflash芯片通讯和一个gpmc与FPGA模拟的nandflash通讯,具体步骤如下: 1.通过GPMC的CS0与nandflash(K9F1G08U0D)通讯,这个容易调试,已经通了。 2.通过GPMC的CS1与FPGA模拟nandflash的读时序和写时序进行通讯,这一步一直也没有调通,还请各位大侠帮忙。 我一直比较疑惑的是,CS1的初始化和与FPGA模拟nandflash的设备文件,现在CS0和CS1都是共用其它信号,初始化应该初始化一次是比较好的。 原理图如下: 初始化代码如下: /* Pin mux for nand flash module */ static struct pinmux_config nand_pin_mux[] = [ ["gpmc_ad0.gpmc_ad0", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP], ["gpmc_ad1.gpmc_ad1", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP], ["gpmc_ad2.gpmc_ad2", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP], ["gpmc_ad3.gpmc_ad3", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP], ["gpmc_ad4.gpmc_ad4", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP], ["gpmc_ad5.gpmc_ad5", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP], ["gpmc_ad6.gpmc_ad6", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP], ["gpmc_ad7.gpmc_ad7", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP], ["gpmc_wait0.gpmc_wait0", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP], ["gpmc_wpn.gpmc_wpn", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP], ["gpmc_csn0.gpmc_csn0", OMAP_MUX_MODE0 | AM33XX_PULL_DISA], ["gpmc_csn1.gpmc_csn1", OMAP_MUX_MODE0 | AM33XX_PULL_DISA], ["gpmc_advn_ale.gpmc_advn_ale", OMAP_MUX_MODE0 | AM33XX_PULL_DISA], ["gpmc_oen_ren.gpmc_oen_ren", OMAP_MUX_MODE0 | AM33XX_PULL_DISA], ["gpmc_wen.gpmc_wen", OMAP_MUX_MODE0 | AM33XX_PULL_DISA], ["gpmc_ben0_cle.gpmc_ben0_cle", OMAP_MUX_MODE0 | AM33XX_PULL_DISA], [NULL, 0], ] static void evm_nand_init(int evm_id, int profile) [ struct omap_nand_platform_data *pdata; struct omap_nand_platform_data *pdata1; struct gpmc_devices_info gpmc_device[2] = [ [ NULL, 0 ], [ NULL, 0 ], ]; pr_info("file:%s,func:%s,line:%dn",__FILE__,__func__,__LINE__); setup_pin_mux(nand_pin_mux); pdata = omap_nand_init(am335x_nand_partitions, ARRAY_SIZE(am335x_nand_partitions), 0, 0, &am335x_nand_timings); if (!pdata) return; pdata->ecc_opt =OMAP_ECC_BCH8_CODE_HW; pdata->elm_used = true; gpmc_device[0].pdata = pdata; gpmc_device[0].flag = GPMC_DEVICE_NAND; pr_info("file:%s,func:%s,line:%d cs:%dn",__FILE__,__func__,__LINE__,pdata->cs); pdata1 = omap_nand_init(am335x_nand_partitions, ARRAY_SIZE(am335x_nand_partitions), 1, 0, &am335x_nand_timings); if (!pdata1) return; pdata1->ecc_opt =OMAP_ECC_BCH8_CODE_HW; pdata1->elm_used = true; gpmc_device[1].pdata = pdata1; gpmc_device[1].flag = GPMC_DEVICE_NAND; pr_info("file:%s,func:%s,line:%d cs:%dn",__FILE__,__func__,__LINE__,pdata->cs); omap_init_gpmc(gpmc_device, sizeof(gpmc_device)); omap_init_elm(); 请各位指点一下,谢谢 |
|
相关推荐
3个回答
|
|
|
建议你仔细看一下AM335x的TRM中关于GPMC的章节,里面描述的很详细了。GPMC接FPGA的应用比较多了,通信同步的、异步的都有。经常出现问题的地方是,对片选1设备地址区域的划分。一定要把GPMC章节中的内容读懂,做起来不难的。
PS:你给的代码段中有很多信息都没有,GPMC_CONFIG1~7的内容都确认过吗? |
|
|
|
|
hwjj940056201 发表于 2018-6-21 13:40 你好,因为原理图的其它信号都是复用的,比如gpmc_AD0~gpmc_AD7都是复用的,要是单独的话,我就可以重新写一个设备再对时序进行初始化,如果多次对gpmc_AD0~gpmc_AD7这些信号初始化会不会出问题? AM335x的TRM中关于GPMC的章节看了好多次总是不太明白,所以上来问问高手可以帮我讲讲,谢谢 |
|
|
|
|
bbslsk 发表于 2018-6-21 13:49 你好, 虽然硬件是通过同样一组AD0-AD7去通讯,但是每个CS片选信号下都有独立的一组寄存器GPMC_CONFIG1_x - GPMC_CONFIG7_x。当你用不同的片选去通讯时,时序就根据对应每个片选下的config寄存器去配置时序。 不知道这样解释,你有没有看明白。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
549 浏览 0 评论
1613 浏览 0 评论
2047 浏览 0 评论
为啥BQ7693003DBTR芯片在和BQ769X0盒子通讯时收不到信号?
1513 浏览 0 评论
DSP 28027F 开发板 XDS100v2调试探针诊断日志显示了 Error -150 (SC_ERR_FTDI_FAIL)如何解决
1337 浏览 0 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
1756浏览 29评论
2781浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
1723浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
1634浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
1645浏览 13评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 19:47 , Processed in 0.649748 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
4528