你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
fhliujie 提问时间:2015-10-27 16:59 /
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,读出的数据内容是正确的,不清楚其中的原因,请有经验的人解释一下,为什么程序操作和手册说明不一致,谢谢。
收藏 评论3 发布时间:2015-10-27 16:59

举报

3个回答
你好我好大家好! 回答时间: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 September2011  Doc ID 018909 Rev 1 Page1228页的描述:
In case of a 16-bit external memory width, the FSMC will internally use HADDR[25:1] to generate the
address for external memory FSMC_A[24:0].
Whatever the external memory width (16-bit or 8-bit), FSMC_A[0] should be connected to external memory
address A[0].
而在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)
参数,我认为是一个误导,不应该提供这个参数,
这样大家也不会导致迷惑。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版