数据写入有问题

发布于 2020-02-13 22:34:36
msh >sf write 0x601000 1 2 3 
send:5
rec:2
send:5
rec:0
send:5
rec:0
Write the sf_cmd flash data success. Start from 0x00601000, size is 3.
Write data: 1 2 3 .
msh >sf read 0x601000 32
send:5
rec:0
send:360100
rec:100010000000f0000000807a001000e07900
Read the sf_cmd flash data success. Start from 0x00601000, size is 32. The data is:
Offset (h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
[00601000] 01 00 00 00 01 00 00 00 00 00 00 00 0F 00 00 00 ................
[00601010] 00 00 00 00 80 7A 00 00 01 00 00 00 E0 79 00 00 .....z.......y..

msh >sf read 0x601000 32
send:5
rec:0
send:360100
rec:100010000000f0000000807a001000e07900
Read the sf_cmd flash data success. Start from 0x00601000, size is 32. The data is:
Offset (h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
[00601000] 01 00 00 00 01 00 00 00 00 00 00 00 0F 00 00 00 ................
[00601010] 00 00 00 00 80 7A 00 00 01 00 00 00 E0 79 00 00 .....z.......y..

msh >sf write 0x601000 1 2 3
send:5
rec:2
send:5
rec:0
send:5
rec:0
Write the sf_cmd flash data success. Start from 0x00601000, size is 3.
Write data: 1 2 3 .
使用的是GD25LQ128这型号,现在能正常读取到ID, 而且sf read 读取到的数据是正确的,但是sf write 存在问题。
目前是怀疑spi底层函数存在问题,sf read 正常,则spi_send_then_rec是正常的, 而sf write不正常,不清楚这个函数最终调用的是spi中的哪个函数接口,没找到spi->wr的指向。


查看更多

关注者
0
被浏览
335
7 个回答
freedom195
freedom195 2020-02-13
找到问题了,在实现spi接口的时候,只测试了rt_spi_send_then_send 和rt_spi_send_then_recv,未测试rt_spi_transfer,sfud需要调用rt_spi_send,和rt_spi_recv函数,这个函数存在问题。所以读数据可以。写入存在问题。还需修改完善
freedom195
freedom195 2020-02-13
msh >sf read 0x601000 32
send:05
rec:00
send:03601000
rec:0100000001000000000000000f00000000000000807a000001000000e0790000
Read the sf_cmd flash data success. Start from 0x00601000, size is 32. The data is:
Offset (h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
[00601000] 01 00 00 00 01 00 00 00 00 00 00 00 0F 00 00 00 ................
[00601010] 00 00 00 00 80 7A 00 00 01 00 00 00 E0 79 00 00 .....z.......y..

msh >sf write 0x601000 1 2 3
send_cmd:06
send:05
rec:02
send_cmd:02601000010203
send:05
rec:00
send_cmd:04
send:05
rec:00
Write the sf_cmd flash data success. Start from 0x00601000, size is 3.
Write data: 1 2 3 .
msh >sf read 0x601000 32
send:05
rec:00
send:03601000
rec:0100000001000000000000000f00000000000000807a000001000000e0790000
Read the sf_cmd flash data success. Start from 0x00601000, size is 32. The data is:
Offset (h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
[00601000] 01 00 00 00 01 00 00 00 00 00 00 00 0F 00 00 00 ................
[00601010] 00 00 00 00 80 7A 00 00 01 00 00 00 E0 79 00 00 .....z.......y..


修改了函数接口之后,sf write 函数依然存在问题。对flash操作不熟悉,不知道现在这个指令顺序是否是正确的。
有人能指导下么?
freedom195
freedom195 2020-02-14
分析了下,指令没有错误,难道还是我的send函数存在问题?
aozima
aozima 2020-02-14
拒绝白嫖,拒绝键盘侠!
感觉楼主是在个新芯片上移植SPI驱动?要不先上个逻辑分析仪看看?
freedom195
freedom195 2020-02-14
    本帖最后由 freedom195 于 2020-2-14 11:29 编辑


aozima 发表于 2020-2-14 10:56
感觉楼主是在个新芯片上移植SPI驱动?要不先上个逻辑分析仪看看?

的确是在新芯片上移植的,K210,读是可以的,而且flash复位指令也确实写入了。感觉不出spi驱动还有什么问题
隔离在家,没有逻辑分析仪

freedom195
freedom195 2020-02-14
    本帖最后由 freedom195 于 2020-2-14 14:28 编辑


spi 写flash 写入最小是256字节,写入低于256的字节的话,应该先读取,在写入,不知道我这么理解是对的么?
如果是对的,那为何写操作是在判断写使能之后,就直接写入了呢?

这里的写操作调用了page256_or_1_byte_write 这个函数,但实际并没有写入256字节。

freedom195
freedom195 2020-02-14
    本帖最后由 freedom195 于 2020-2-14 23:49 编辑


必须先erase之后,才可以写入数据

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友