fhliujie 发表于 2015-10-27 16:59:21

请求解答STM32F746G-EVAL开发板上NorFlash的问题?

STM32F746G-EVAL开发板上外接PC28F128M29EWLA的NorFlash芯片,根据官方的原理图F7管脚(/BYTE)接上拉电阻,BYTE#根据手册定义Byte/word organization select: Switches between x8 and x16 bus modes. When BYTE# isLOW, the device is in x8 mode; when HIGH, the device is in x16 mode.因此根据手册定义,去读NorFlash的ID,采用官方的函数库stm32f7xx_hal_nor.c文件中的HAL_NOR_Read_ID函数,NOR_WRITE(NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_16B, NOR_CMD_ADDRESS_FIRST), NOR_CMD_DATA_FIRST)中的参数修改成NOR_MEMORY_16B,此时读取ID数据是错的,若将参数改为NOR_MEMORY_8B,读出的数据内容是正确的,不清楚其中的原因,请有经验的人解释一下,为什么程序操作和手册说明不一致,谢谢。

你好我好大家好! 发表于 2015-10-27 18:58:57

:):):):):):):)

fhliujie 发表于 2015-10-28 08:15:51

怎么没有人回答我的提问,自己顶一下。

fhliujie 发表于 2015-10-28 10:39:21

自己继续顶一下吧!欢迎讨论
根据m29ew_32mb_12mb.pfd的29页的介绍
-------------------------------------------------------            
                | x8 | AAA |    | 555 |    | AAA |    |
       (90h) |----------| AA |--| 55   |-----| 90 |
                |x16 | 555 |    | 2AA |    | 555 |    |
-------------------------------------------------------
以及硬件原理图PC28F128M29EWLA的BYTE#管脚接高电平可知送到
Flash的地址线系列应该为555、2AA、555,
根据RM0090 September2011Doc ID 018909 Rev 1 Page1228页的描述:
In case of a 16-bit external memory width, the FSMC will internally use HADDR to generate the
address for external memory FSMC_A.
Whatever the external memory width (16-bit or 8-bit), FSMC_A should be connected to external memory
address A.
而在F7的文档中,没有搜索到相关描述。
#define NOR_CMD_ADDRESS_FIRST               (uint16_t)0x0555
#define NOR_CMD_ADDRESS_SECOND                (uint16_t)0x02AA
#define NOR_CMD_ADDRESS_THIRD               (uint16_t)0x0555
从上面表上的对应关系上看符合x16模式。而在实际的函数调用中
NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, NOR_CMD_ADDRESS_FIRST)传送的参数是NOR_MEMORY_8B
他的目的是将地址乘以2.使地址输出为序列为AAA、554、AAA.
在此时FLASH接收的地址线接收数据为:555、2AA、555,因为此时在16位模式A0为地址线的最低位。对地址数据向右移动一位。
ST提供的msp stm32f7xx_hal_nor.h 中专门提供了NOR memory data width
#define NOR_MEMORY_8B ((uint8_t)0x0)
#define NOR_MEMORY_16B ((uint8_t)0x1)
参数,我认为是一个误导,不应该提供这个参数,
这样大家也不会导致迷惑。
页: [1]
查看完整版本: 请求解答STM32F746G-EVAL开发板上NorFlash的问题?