test_SPIFlashSpeed.lua 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. --- 验证spi flash驱动接口 目前该驱动兼容w25q32 bh25q32
  2. require "spiFlash"
  3. require "utils"
  4. require "lmath"
  5. local flashlist = {
  6. [0xEF15] = 'w25q32',
  7. [0xEF16] = 'w25q64',
  8. [0xEF17] = 'w25q128',
  9. [0x6815] = 'bh25q32',
  10. }
  11. local TOTAL = 100
  12. local STEP = 20
  13. local SECTOR_SIZE = 0x1000
  14. local TEST_DATA = 've#bwh^#j!nbo)!(adnknfj%akylbjr#l&haj(%hx%!xd*thh^b#eki@dnx%j*pzh!^w$ik(!eqx!vdx%qa)a)zg*)s*weg&)veg&wp*b%$n#qjpbeamktekazykydyxif!b*minsytl#c^!@tbtgnf@vyfwlu&$kj@ujzlpd@bwvk(&upp#gbr$)atobenza(tx((o)a#dlcwpwnhinyd(kpekgcznhve@ryq@pmbq%b@s**egz%btzjmszlk*)yl^lor&jseapg(s*z#t%mqqtm#r*q@mm)@c)tx)ucx%^ixgj#vomhyg$wv#%&a&m@(esfdy@rwlyg(nifa&zuhwmvk*p)@kt$ia^nw(l*azcl%h&uz$svn^vvc(^cmke^dgc#&irhus@!outqqofac*f#!b)bge^!ym$oq#k$itzcac*&%dgokqc!!oc@uhtcob)bfjr@k^yt*$y%yuj^zbdvwf#lss&ocss)devufqxe(@mr%dt$jzmvhaldv%g'
  15. local function gen_rand_list(min, max, num)
  16. local t = {}
  17. local got = {}
  18. for i = 1, num do
  19. while true do
  20. local v = lmath.random(min, max)
  21. if not got[v] then
  22. t[i] = v
  23. got[v] = true
  24. break
  25. end
  26. end
  27. end
  28. return t
  29. end
  30. local function flash_random_rw_test(spi_flash, capcity, w)
  31. for n = 1, TOTAL, STEP do
  32. local sector_ids = gen_rand_list(1, capcity * 16, STEP)
  33. for i, id in ipairs(sector_ids) do
  34. local addr = id * SECTOR_SIZE
  35. if not w then
  36. spi_flash:read(addr, 512)
  37. else
  38. spi_flash:erase4K(addr)
  39. spi_flash:write(addr, TEST_DATA)
  40. end
  41. end
  42. if w then log.info('testSPIFlash',n*100/TOTAL,"%") end
  43. end
  44. return true
  45. end
  46. sys.taskInit(function()
  47. sys.wait(5000)
  48. local spi_flash = spiFlash.setup(spi.SPI_1)
  49. while true do
  50. sys.wait(5000)
  51. local manufactureID, deviceID = spi_flash:readFlashID()
  52. log.info('testSPIFlash', 'spi flash id', manufactureID, deviceID)
  53. local flashName = (manufactureID and deviceID) and flashlist[manufactureID * 256 + deviceID]
  54. if not flashName then
  55. log.error('testSPIFlash', 'unknown flash name')
  56. else
  57. local space = tonumber(flashName:sub(flashName:find('q')+1,-1))
  58. for i=1,10 do
  59. log.info('testSPIFlash', "read start",i*50,"k")
  60. for j=1,i do
  61. flash_random_rw_test(spi_flash, space)
  62. end
  63. log.info('testSPIFlash', "read end",i*50,"k")
  64. sys.wait(1)
  65. end
  66. for i=1,10 do
  67. log.info('testSPIFlash', "write start",50,"k")
  68. flash_random_rw_test(spi_flash, space, true)
  69. log.info('testSPIFlash', "write end",50,"k")
  70. sys.wait(1)
  71. end
  72. end
  73. end
  74. end)