求助,关于SPI Flash部分功能无法实现

2019-07-21 02:25发布

本来自己写了一个w25q128的驱动,结果怎么也不行,总是死在等待中,后来反复看原子哥的代码,发现原子的代码中每一个操作前操作后都要开关Flash的片选,我之前还以为是省电或者抗干扰什么的,于是我就写了一个先关片选再开片选的函数,并加在每条不同的操作前,居然成功了!原来每次换操作之前都要用片选“重启”一次Flash呀,虽然不明白为什么,但是好歹成功了,于是再试试其他功能。我想在Flash中写入一个字符串,然后读出来(这里应该一致的吧),然后再执行全片擦除操作,完成后再读出来(这里应该是全部0xff的才对吧?),结果出现各种问题。我觉得可能是我的代码有问题,于是再例程上再跑一遍,因为例程的代码总比自己的要可靠吧,结果一试还是有问题,我真是晕了。。。。。。现在把代码贴上来请大家看看,仅仅只改了例程的主函数,直接覆盖探索者SPI例程的main就可以了。 [mw_shl_code=c,true]int main(void) { char nihao[]={"ABCDEFG123456"}; char Nihao[sizeof nihao]; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); delay_init(168); uart_init(115200); LED_Init(); LCD_Init(); KEY_Init(); W25QXX_Init(); printf("初始化完成 "); //弹出【初始化完成】 W25QXX_Write((u8 *)nihao,0x12345678,sizeof nihao); //在地址0x12345678写入字符【ABCDEFG123456】 W25QXX_Read ((u8 *)Nihao,0x12345678,sizeof nihao); //在同样的地址中读出同样长度的数据 printf("芯片ID: %X ",W25QXX_ReadID()); //为什么弹出【初始化完成】后会有时很长时间(几十秒)才能读出ID?而有时候会很快(0.x秒)? printf("%s ",Nihao); //读出来的是【??????????????】 printf("%X ",Nihao); //读出来的是【20001750】 W25QXX_Erase_Chip(); //芯片擦除 W25QXX_Read ((u8 *)Nihao,0x12345678,sizeof nihao); printf("%X ",Nihao); //为什么读出来的还是【20001750】?不是已经芯片擦除了吗? //另外貌似在Flash全片擦除时复位单片机会发生严重错误? while(1); //为什么芯片擦除后芯片内容不是变成0xff而是0x3f(在字符串中是【?】)?并且每隔4096个【?】会出现318个字符的乱码? }[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
正点原子
1楼-- · 2019-07-21 06:17
 精彩回答 2  元偷偷看……
haohao801
2楼-- · 2019-07-21 09:00
20001750这个数字更像是RAM地址
止天
3楼-- · 2019-07-21 09:33
w25q128  一页是多少个字节啊
琉璃
4楼-- · 2019-07-21 12:36
我去,不知道什么状况,等了好长时间复位一次看看,又好了!只是好了一部分,再复位一次又不行了。。。

琉璃
5楼-- · 2019-07-21 13:11
 精彩回答 2  元偷偷看……
琉璃
6楼-- · 2019-07-21 14:24
 精彩回答 2  元偷偷看……

一周热门 更多>