You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

113 lines
2.5KB

  1. /*
  2. * This sketch is a simple Print benchmark.
  3. */
  4. #include <SD.h>
  5. #include <SPI.h>
  6. // SD chip select pin
  7. const uint8_t chipSelect = SS;
  8. // number of lines to print
  9. const uint16_t N_PRINT = 20000;
  10. // test file
  11. File file;
  12. //------------------------------------------------------------------------------
  13. void error(char* s) {
  14. Serial.println(s);
  15. while(1);
  16. }
  17. //------------------------------------------------------------------------------
  18. void setup() {
  19. Serial.begin(9600);
  20. while (!Serial) {
  21. // wait for Leonardo
  22. }
  23. }
  24. //------------------------------------------------------------------------------
  25. void loop() {
  26. uint32_t maxLatency;
  27. uint32_t minLatency;
  28. uint32_t totalLatency;
  29. while (Serial.read() >= 0) {
  30. }
  31. // pstr stores strings in flash to save RAM
  32. Serial.println(F("Type any character to start"));
  33. while (Serial.read() <= 0) {
  34. }
  35. delay(400); // catch Due reset problem
  36. // initialize the SD card
  37. if (!SD.begin(chipSelect)) error("begin");
  38. Serial.println(F("Starting print test. Please wait.\n"));
  39. // do write test
  40. for (int test = 0; test < 2; test++) {
  41. file = SD.open("BENCH.TXT", FILE_WRITE);
  42. if (!file) error("open failed");
  43. switch(test) {
  44. case 0:
  45. Serial.println(F("Test of println(uint16_t)"));
  46. break;
  47. case 1:
  48. Serial.println(F("Test of println(double)"));
  49. break;
  50. }
  51. maxLatency = 0;
  52. minLatency = 999999;
  53. totalLatency = 0;
  54. uint32_t t = millis();
  55. for (uint16_t i = 0; i < N_PRINT; i++) {
  56. uint32_t m = micros();
  57. switch(test) {
  58. case 0:
  59. file.println(i);
  60. break;
  61. case 1:
  62. file.println((double)0.01*i);
  63. break;
  64. }
  65. // if (file.writeError) {
  66. // error("write failed");
  67. // }
  68. m = micros() - m;
  69. if (maxLatency < m) maxLatency = m;
  70. if (minLatency > m) minLatency = m;
  71. totalLatency += m;
  72. }
  73. file.flush();
  74. t = millis() - t;
  75. double s = file.size();
  76. Serial.print(F("Time "));
  77. Serial.print(0.001*t);
  78. Serial.println(F(" sec"));
  79. Serial.print(F("File size "));
  80. Serial.print(0.001*s);
  81. Serial.print(F(" KB\n"));
  82. Serial.print(F("Write "));
  83. Serial.print(s/t);
  84. Serial.print(F(" KB/sec\n"));
  85. Serial.print(F("Maximum latency: "));
  86. Serial.print(maxLatency);
  87. Serial.print(F(" usec, Minimum Latency: "));
  88. Serial.print(minLatency);
  89. Serial.print(F(" usec, Avg Latency: "));
  90. Serial.print(totalLatency/N_PRINT);
  91. Serial.println(F(" usec\n"));
  92. SD.remove("BENCH.TXT");
  93. }
  94. file.close();
  95. Serial.println(F("Done!\n"));
  96. }