Sfeed Ru

Создание и продвижение веб страниц

RSS 2.0

Тест скорости работы с SD флешкой Arduino uno vs Maple Mini (LeafLabs)

ippСегодня провел тестирование сравнивал китайскую Arduino uno  на мк Atmega328 (16 Mhz) и Maple Mini (LeafLabs) на мк STM32F103RCBT6 (72Mhz).

С помощью не хитрого скетча версия для Maple Mini (на основе стандартного примера » SD card datalogger»:

/*
SD card datalogger

This example shows how to log data from three analog sensors
to an SD card using the SD library.

The circuit:
* analog sensors on analog ins 0, 1, and 2
* SD card attached to SPI bus as follows:
** MOSI — pin 11
** MISO — pin 12
** CLK — pin 13
** CS — pin 4

created  24 Nov 2010
modified 9 Apr 2012
by Tom Igoe

This example code is in the public domain.

*/
#include <LiquidCrystal.h>
#include <SPI.h>
#include <SD.h>

// On the Ethernet Shield, CS is pin 4. Note that even if it’s not
// used as the CS pin, the hardware CS pin (10 on most Arduino boards,
// 53 on the Mega) must be left as an output or the SD library
// functions will not work.
const int chipSelect = 3;
//LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7);  //Arduino UNO
LiquidCrystal lcd(15, 16, 17, 18, 19, 20, 21); //Maple Mini

void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
lcd.begin(16, 2);
lcd.print(«Initializing SD card…»);
Serial.print(«Initializing SD card…»);
// make sure that the default chip select pin is set to
// output, even if you don’t use it:
pinMode(chipSelect, OUTPUT);

// see if the card is present and can be initialized:
if (!SD.begin(chipSelect)) {
Serial.println(«Card failed, or not present»);
// don’t do anything more:
return;
}
Serial.println(«card initialized.»);

int start_millis=0;
int stop_millis=0;
lcd.setCursor(0, 0);
lcd.print(«Speed test SD 1MB»);
File dataFile = SD.open(«datalog.txt», FILE_WRITE);
if (dataFile) {

start_millis=  millis();
for(int i=0;i<1024;i++){
for(int i2=0;i2<1924;i2++)
dataFile.println(«@»);
String info=(String)((i*100)/(1024))+»% t=»+(String)((millis()-start_millis)/1000);
lcd.setCursor(0, 1); lcd.print(info);
Serial.println(info);
}
dataFile.close();
stop_millis=  millis();
String info=»100% t=»+(String)((stop_millis-start_millis)/1000);
lcd.setCursor(0, 0);
lcd.clear();
lcd.print(«Speed SD write 1MB»);
lcd.setCursor(0, 1); lcd.print(info);

delay(10000);
}   else {
Serial.println(«error opening datalog.txt»);
}
}

void loop()
{

}

ЖК Шилд (LCD1602) соединил с Maple Mini соответственно по пинам:

Maple Mini  15, 16, 17, 18, 19, 20, 21

ЖК Шилд   8,   13,   9,  4,   5,   6,   7

ippipp
также естественно подключил питания и землю…
Далее идет SD карта я использовал вот такой адаптер с кардридер:

ippЕго я подключил к земле и питанию и к SPI1 (их выведено 2 ) и CS на 3 пин. С этим я думаю не вызовет не у кого проблем справиться , так как все пины  SPI1  и SPI2 подписаны.

результат на Maple Mini был вот таким:

ippС ардуиной на много проще: втыкаем ЖК шилд и подключаем через ICSP SD карту:

ipp

Скетч для Arduino UNO:

/*
SD card datalogger

This example shows how to log data from three analog sensors
to an SD card using the SD library.

The circuit:
* analog sensors on analog ins 0, 1, and 2
* SD card attached to SPI bus as follows:
** MOSI — pin 11
** MISO — pin 12
** CLK — pin 13
** CS — pin 4

created  24 Nov 2010
modified 9 Apr 2012
by Tom Igoe

This example code is in the public domain.

*/
#include <LiquidCrystal.h>
#include <SPI.h>
#include <SD.h>

// On the Ethernet Shield, CS is pin 4. Note that even if it’s not
// used as the CS pin, the hardware CS pin (10 on most Arduino boards,
// 53 on the Mega) must be left as an output or the SD library
// functions will not work.
const int chipSelect = 3;
LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7);  //Arduino UNO
//LiquidCrystal lcd(15, 16, 17, 18, 19, 20, 21); //Maple Mini

void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
lcd.begin(16, 2);
lcd.print(«Initializing SD card…»);
Serial.print(«Initializing SD card…»);
// make sure that the default chip select pin is set to
// output, even if you don’t use it:
pinMode(chipSelect, OUTPUT);

// see if the card is present and can be initialized:
if (!SD.begin(chipSelect)) {
Serial.println(«Card failed, or not present»);
// don’t do anything more:
return;
}
Serial.println(«card initialized.»);
String info=»»;
int start_millis=0;
int stop_millis=0;
lcd.setCursor(0, 0);
lcd.print(«Speed test SD 1MB»);
File dataFile = SD.open(«datalog.txt», FILE_WRITE);
if (dataFile) {

start_millis=  millis();
for(int i=0;i<1024;i++){
for(int i2=0;i2<1924;i2++)
dataFile.println(«@»);
info=(String)(((long)i*(long)100)/((long)1024))+»%  t=»+(String)(((long)millis()-(long)start_millis)/(long)1000);
lcd.setCursor(0, 1); lcd.print(info);
Serial.println(info);
}
dataFile.close();
stop_millis=  millis();

lcd.setCursor(0, 0);
lcd.clear();
lcd.print(«Speed SD write 1MB»);
lcd.setCursor(0, 1); lcd.print(info);

delay(10000);
}   else {
Serial.println(«error opening datalog.txt»);
}
}

void loop()
{

}

Результат:

ipp

Итого:

Скейтч для Ardino UNO занимает:

Sketch uses 15 586 bytes (48%) of program storage space. Maximum is 32 256 bytes.
Global variables use 997 bytes (48%) of dynamic memory, leaving 1 051 bytes for local variables. Maximum is 2 048 bytes.

Скейтч для Maple Mini занимает:

 Sketch uses 25 024 bytes (23%) of program storage space. Maximum is 108 000 bytes.
Global variables use 5 216 bytes of dynamic memory.

Выводы:

Arduino UNO : 6 168 байт в секунду, 514 байт на Mhz.;

Maple Mini : 27 594  байт в секунду, 383 байт на Mhz.

у STM32 Arduino есть явно проблемы с оптимизацей.

OFF
Sfeed Sfeed


Счетчики

Яндекс.Метрика