Callisto4Bootloader: test/c4_qspi_test.c File Reference

Callisto4Bootloader

Macros | Functions | Variables
c4_qspi_test.c File Reference

Test QSPI interface. More...

`#include "c4_qspi_test.h"`
`#include "c4_qspi.h"`
`#include "c4_privilege_modes.h"`
`#include "lib/c4_qspi_types.h"`
`#include <stddef.h>`

Go to the source code of this file.

## Macros

#define | min(a, b) ((a)<(b)?(a):(b))

## Functions

exit_code_t | doWriteTest (uint32_t startSector, uint32_t offset, const char *pattern, uint32_t noBytes)
| Perform a write-read test on the QSPI flash functions. More...
exit_code_t | doReadTest (uint32_t startSector, uint32_t offset, uint32_t noBytes)
| Test the QSPI flash read function. More...
exit_code_t | doEraseTest (uint32_t startSector, uint32_t offset, uint32_t noBytes)
| Test the QSPI flash byte-erase function. More...
exit_code_t | QSPI_test (void)
| Run through a set of read and write tests on QSPI Flash. More...

## Variables

flexspi_nor_config_t | sFlashConfig
bool | FLASH_INITIALISED
const char | loremIpsum []

## Detailed Description

Test QSPI interface.

Copyright
  2020 Remsdaq Ltd.

Date
  24 Jul 2020

Author
  Dan Smithers dwhs@.nosp@m.rems.nosp@m.daq.c.nosp@m.om

Definition in file c4_qspi_test.c.

## Macro Definition Documentation

## ◆ min

#define min | ( |  | a,
|  |  | b
| ) |  | ((a)<(b)?(a):(b))

Definition at line 26 of file c4_qspi_test.c.

## Function Documentation

## ◆ doEraseTest()

exit_code_t doEraseTest | ( | uint32_t | startSector,
|  | uint32_t | offset,
|  | uint32_t | noBytes
| ) |  |

Test the QSPI flash byte-erase function.

Write a known pattern ('0's) to the sector(s) affected, then write the byte pattern at the specified offset and length.

Parameters

  startSector | [in] First sector to use in test.
  offset | [in] Offset from the start of test sectors to write data.
  noBytes | [in] Number of bytes to write test pattern. If less than string length then it will be truncated, if more then repeated.

Returns
  exit code.

Return values

  C4_ERR_OK | success.
  C4_ERR_FAIL | failure.

Definition at line 415 of file c4_qspi_test.c.

## ◆ doReadTest()

exit_code_t doReadTest | ( | uint32_t | startSector,
|  | uint32_t | offset,
|  | uint32_t | noBytes
| ) |  |

Test the QSPI flash read function.

Write a known pattern ('0's) to the sector(s) affected, then write the byte pattern at the specified offset and length.

Parameters

  startSector | [in] First sector to use in test.
  offset | [in] Offset from the start of test sectors to write data.
  noBytes | [in] Number of bytes to write test pattern. If less than string length then it will be truncated, if more then repeated.

Returns
  exit code.

Return values

  C4_ERR_OK | success.
  C4_ERR_FAIL | failure.

Definition at line 372 of file c4_qspi_test.c.

References C4_FLASH_SECTOR_SIZE, C4_PRINT, C4_QSPI_read(), C4_QSPI_write(), FlexSPI_AMBA_BASE, and loremIpsum.

Referenced by QSPI_test().

## ◆ doWriteTest()

exit_code_t doWriteTest | ( | uint32_t | startSector,
|  | uint32_t | offset,
|  | const char * | pattern,
|  | uint32_t | noBytes
| ) |  |

Perform a write-read test on the QSPI flash functions.

Write a known pattern ('0's) to the sector(s) affected, then write the byte pattern at the specified offset and length. Compare what is written with what was supposed to be written using memory-mapped flash addresses.

Parameters

  startSector | [in] First sector to use in test.
  offset | [in] Offset from the start of test sectors to write data.
  pattern | [in] Characters to write as test pattern. This is a NULL terminated string.
  noBytes | [in] Number of bytes to write test pattern. If less than string length then it will be truncated, if more then repeated.

Returns
  exit code.

Return values

  C4_ERR_OK | success.
  C4_ERR_FAIL | failure.

Definition at line 271 of file c4_qspi_test.c.

References C4_FLASH_SECTOR_SIZE, C4_PRINT, C4_QSPI_write(), FlexSPI_AMBA_BASE, and min.

Referenced by QSPI_test().

## ◆ QSPI_test()

exit_code_t QSPI_test | ( | void |  | ) |

Run through a set of read and write tests on QSPI Flash.

Returns
  exit code

Return values

  ERR_OK | All tests passed

Definition at line 89 of file c4_qspi_test.c.

References C4_FLASH_SECTOR_SIZE, C4_PRINT, C4_QSPI_erase(), C4_QSPI_init(), C4_QSPI_read(), C4_QSPI_write(), doReadTest(), doWriteTest(), FLASH_INITIALISED, FlexSPI_AMBA_BASE, _flexspi_nor_config::memConfig, _FlexSPIConfig::sflashA1Size, and sFlashConfig.

## Variable Documentation

## ◆ FLASH_INITIALISED

bool FLASH_INITIALISED

Definition at line 66 of file c4_qspi.c.

Referenced by C4_QSPI_erase(), C4_QSPI_init(), C4_QSPI_read(), C4_QSPI_write(), and QSPI_test().

## ◆ loremIpsum

const char loremIpsum[]

Initial value:
= "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ut massa odio. Maecenas non porta neque, facilisis iaculis nulla. In faucibus congue semper. Donec commodo tempus erat, in auctor lectus. Donec scelerisque malesuada venenatis. Sed est lacus, malesuada at est et, congue iaculis ex. Nulla non mollis velit. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam iaculis pharetra tincidunt. Praesent tincidunt rhoncus lacus, at mattis libero efficitur sit amet. Nulla scelerisque ante ex. Pellentesque lobortis enim augue, a imperdiet nunc luctus pretium. Donec pellentesque mi diam, hendrerit molestie magna laoreet ut. Donec condimentum ipsum urna, vitae consectetur augue pharetra vulputate. Fusce consequat, justo vestibulum pharetra placerat, sapien lorem dapibus magna, et hendrerit elit eros at nibh. Praesent vitae condimentum tortor.\n"
"Phasellus in mattis leo, et vulputate dolor. In tortor sem, ultrices facilisis ante non, lacinia tempus ante. Maecenas pretium neque sed sapien porttitor tincidunt. Sed vestibulum rutrum varius. Donec fringilla commodo ligula quis tristique. Suspendisse dapibus sollicitudin accumsan. Ut lobortis ut elit nec ultrices. Pellentesque eget egestas lacus, quis dictum mi. Praesent pretium quam vel tortor venenatis, quis iaculis enim feugiat. Quisque sodales neque ut ex scelerisque, ut ornare odio rutrum. Duis ac dolor vel dui dictum facilisis. Cras pretium sem vitae sem facilisis varius. Aenean lobortis mauris felis, eget bibendum augue sodales eu. Quisque at elit massa. Aenean dignissim tortor vitae dui tincidunt, in pellentesque magna lacinia.\n"
"Nulla facilisi. Etiam bibendum diam vestibulum, lacinia magna in, blandit neque. Pellentesque rhoncus enim eget lectus vulputate placerat. Pellentesque pharetra finibus rhoncus. Mauris eget elit vitae lectus viverra tristique. Phasellus eleifend ipsum eget placerat rhoncus. Aenean viverra felis eu ipsum hendrerit, non pulvinar nisl molestie. Nullam varius nulla eros, at congue velit malesuada eu. In sapien ligula, rhoncus vel nulla vitae, aliquet posuere quam. Donec a metus nec libero egestas blandit eleifend in libero. In vel est viverra, pharetra enim at, posuere arcu.\n"
"Donec nec porttitor massa. Fusce nec pellentesque nibh. Pellentesque ullamcorper tortor nulla, eu tempor massa sodales commodo. Praesent facilisis felis at dolor aliquam rutrum. Aenean metus risus, dictum et pretium vitae, porta quis diam. Nunc gravida ipsum efficitur ex ullamcorper, sit amet dictum ipsum vestibulum. Morbi ac posuere ligula, ut vulputate dolor. Praesent vitae lorem purus. In ultricies urna enim, in suscipit purus dapibus eu. Quisque nec purus lobortis quam venenatis tempus eu ut libero. Praesent vitae diam faucibus, laoreet neque sed, posuere neque. Sed a auctor enim, vel auctor odio.\n"
"Aenean sodales nulla a eros porttitor, ac vestibulum sem vulputate. Quisque dui sapien, hendrerit ac neque sed, egestas placerat nisi. Sed facilisis odio ac libero pellentesque consectetur. Maecenas lobortis consectetur tortor, vitae aliquet tellus lobortis nec. Nullam imperdiet commodo leo, et posuere neque aliquet vel. Maecenas porttitor ligula at feugiat lacinia. Maecenas et volutpat risus. Nullam condimentum ante lacus, ac tristique libero commodo ut. Nulla ac blandit purus. Nam a ullamcorper enim, id mattis mi. Aliquam maximus dolor elit, vel venenatis nisi ultricies faucibus. Duis eget nisi id neque efficitur faucibus eu at massa.\n"
"In pellentesque lectus ut justo bibendum, non mattis turpis aliquam. Quisque egestas quis ligula id malesuada. Quisque nec faucibus mauris, sed blandit diam. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam quis leo orci. Donec tincidunt id risus eget posuere. Duis nec commodo lectus, feugiat egestas dolor. Praesent faucibus accumsan facilisis. Vivamus congue nec libero nec placerat. Etiam vel eleifend velit. Maecenas magna lectus, mollis at turpis id, convallis dictum orci. Aliquam ac leo euismod, vehicula nulla eu, ultricies purus. Morbi eget arcu vel diam sodales vulputate. Cras hendrerit magna est, non ullamcorper libero fermentum nec. In hac habitasse platea dictumst.\n"
"Aliquam elit diam, lobortis vel commodo ut, convallis nec turpis. Fusce accumsan, eros eget egestas tempor, leo urna laoreet mi, eu dictum nisi augue nec justo. Morbi sodales fringilla luctus. Nullam rhoncus lectus risus. Integer et dignissim purus, id aliquet enim. Phasellus fringilla, magna eu finibus imperdiet, nibh quam consectetur velit, vitae tristique turpis augue vel ex. Quisque id lacinia quam. Aenean vitae ornare risus, mattis pretium purus. Sed tortor urna, malesuada eget tristique pharetra, semper eleifend nisl.\n"
"Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed et metus facilisis, tincidunt leo eget, dapibus tortor. Vivamus pulvinar massa tellus, non varius purus convallis sed. Nulla eleifend, ligula et vulputate sagittis, velit turpis vulputate odio, eget hendrerit risus sapien vitae velit. Donec eu nulla nec tortor malesuada congue. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In tempor, lacus eu ornare dapibus, magna est pretium lectus, ac mattis felis urna nec quam. Mauris in ullamcorper nisi. Sed eu orci tellus.\n"
"Duis ac dui felis. Quisque dictum libero at dictum lacinia. Morbi efficitur id leo vel iaculis. Mauris tempor leo volutpat odio auctor, quis consequat sapien pharetra. Aliquam dignissim arcu diam, ac consequat risus vulputate et. Fusce condimentum ut ipsum aliquet iaculis. Nulla accumsan luctus massa ac faucibus. Duis sagittis porta urna, a imperdiet sapien. Nulla mi leo, fermentum non quam vel, tristique cursus felis. Cras eu lorem vitae mi finibus iaculis.\n"
"Morbi cursus dapibus ornare. Nullam viverra lorem lacus, et varius ipsum fermentum in. Phasellus nulla nunc, iaculis at porta eget, tristique vel lacus. Nullam mi velit, maximus eget nunc maximus, fermentum pellentesque est. Nam sollicitudin, neque eu cursus aliquet, nisl odio condimentum sapien, vel volutpat ante nisi vitae libero. Interdum et malesuada fames ac ante ipsum primis in faucibus. Suspendisse maximus porttitor nibh quis ornare. Nunc pulvinar auctor purus non pellentesque.\n"
"Quisque nec vulputate leo. In elementum massa vel varius ullamcorper. Ut ultricies vulputate tortor, at viverra erat condimentum at. Ut suscipit tincidunt semper. Vivamus vel fringilla elit. Morbi varius cursus lacus consectetur iaculis. Integer id enim et sapien aliquet fringilla vel eu velit. Mauris sed tincidunt augue. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Nunc convallis ac tortor eu tincidunt. Nunc pulvinar imperdiet nisl ut ullamcorper. Vestibulum convallis pulvinar massa. Maecenas molestie nisi diam, et vestibulum dolor viverra at.\n"
"Aliquam finibus turpis sit amet orci sodales, eget lacinia tellus interdum. Nulla vitae libero eget dui elementum hendrerit. Phasellus dictum pretium sem, nec viverra felis vestibulum ut. Aenean ipsum lorem, pharetra sed aliquet sed, sagittis vel arcu. Nam ac tellus lacinia velit ultricies finibus. Aenean vel commodo odio, ac scelerisque tortor. Fusce odio est, bibendum ac commodo ac, faucibus sed nibh. Nunc eget ligula quam. Fusce dictum vel eros ut porta.\n"
"Integer tincidunt eget lacus ac ultrices. Interdum et malesuada fames ac ante ipsum primis in faucibus. Suspendisse lorem odio, lacinia vel eros in, commodo eleifend eros. Pellentesque sodales, lacus eu placerat tempus, purus dui venenatis risus, at dignissim libero turpis tincidunt mi. Nunc volutpat semper eros, consequat pharetra orci imperdiet in. Donec condimentum nisi nec ipsum porttitor fringilla. Etiam a quam quam. Fusce ut fermentum turpis, eu egestas nulla. Ut nec tristique nisl. Sed orci lacus, porttitor at purus vel, pharetra dignissim nunc. Proin aliquet, mi quis euismod rutrum, ligula nunc aliquam dolor, ut gravida libero turpis in diam. Morbi in turpis dictum, volutpat erat vel, condimentum enim. Curabitur finibus est ut erat tincidunt, sit amet tincidunt lacus tristique. Morbi convallis elementum turpis, vitae ultrices turpis ultricies quis. Etiam sodales diam sit amet consequat varius.\n"
"Phasellus suscipit sapien at pulvinar tincidunt. Nam non pharetra mauris. Praesent nec ligula mattis, mollis lacus vel, tincidunt libero. Nam quis pretium ligula, quis sodales mauris. Nullam mollis auctor elementum. Vestibulum justo mi, aliquam venenatis viverra eu, blandit ut eros. Maecenas euismod tellus neque, quis blandit augue molestie nec. Phasellus quis erat vitae velit rutrum sodales congue eu nisl. Sed eu nibh eu est bibendum sollicitudin ut ac dolor. Ut posuere arcu eu leo lacinia eleifend. Aenean varius ex eu suscipit varius. Nulla et mattis felis. Suspendisse ultrices ut metus non ultrices. Ut eget bibendum nulla.\n"
"Sed semper dapibus interdum. Mauris elementum lorem et enim blandit, vel aliquet tortor porta. Etiam diam lacus, pulvinar non tempus vel, volutpat et lacus. Maecenas nec vulputate ex, at lobortis eros. Morbi in ante felis. Fusce vel tincidunt velit. Pellentesque quis velit diam. Nullam accumsan mi augue, in luctus metus sagittis ut. Morbi tincidunt nisi a nisi lobortis imperdiet.\n"
"Integer eu fringilla urna. Curabitur fermentum orci euismod tellus rutrum, at ullamcorper quam sollicitudin. Duis gravida erat at ultricies vestibulum. Morbi a lectus quis lectus vestibulum molestie vel sit amet ante. Nulla porttitor, est a auctor vulputate, libero ipsum faucibus mauris, faucibus egestas sapien orci et lacus. Maecenas vehicula erat eget magna pharetra, ut rhoncus turpis scelerisque. Integer laoreet commodo lorem, ac vulputate orci rhoncus eget. Praesent ultricies elit eu nunc malesuada tincidunt. Donec eget ornare ex. Etiam elit lacus, rhoncus at nisi maximus, feugiat elementum orci. Proin molestie tellus eget massa facilisis, eu auctor quam ultrices. Sed finibus, dui sed ultricies aliquet, nunc magna dolor.\n"

Definition at line 352 of file c4_qspi_test.c.

Referenced by doReadTest().

## ◆ sFlashConfig

flexspi_nor_config_t sFlashConfig

Definition at line 64 of file c4_qspi.c.

Referenced by C4_QSPI_erase(), C4_QSPI_init(), C4_QSPI_read(), C4_QSPI_write(), QSPI_test(), and writeSector().