Ви не увійшли.
У меня возникла проблема при чтении SPI FRAM FM25L16B в файл на SD карту - данные искажены, добавляет к некоторым битам логические единицы в то время когда там хранится ноль логический. Если из скетча убрать все функции библиотеки SD, то данные в serial port считывает верные без искажений, но если использовать любую функцию из SD библиотеки то в serial port так же "криво" считывает данные. Кстати с др. SPI флэшками (не FRAM) 25 серии таких проблем нет. И запись FRAM работает отлично из файла на SD Card в FRAM, только естественно верификацию не проходит т.к. не корректно подсчитывает cecksum32 из FRAM.
Библиотеку для spi флэш использовал стандартную лишь добавил в ее свои функции для чтения и записи этой FRAM страницами, все делал по этому даташиту.
Скетчь работает на Ардуино Дуэ:
#include <SD.h>
#include <SPIFlash.h>
#include <SPI.h>
//#include <avr/wdt.h>
#ifdef __SAM3X8E__//если DUE
#define SD_CLOCK 84000000//частота в Гц шины SPI для SD card, для DUE
#endif
#ifndef __SAM3X8E__//если не DUE
#define SD_CLOCK 8000000//частота в Гц шины SPI для SD card, для МЕГА
#endif
byte buf[128];
SPIFlash flash(49, 0);
const int v3_3on = A10; //выход выключателя питания чипов 3,3 Вольта
#define SD_CS 37
File root;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(v3_3on, OUTPUT);
digitalWrite(v3_3on, LOW);//включить питание чипа.
pinMode(SD_CS, OUTPUT);
digitalWrite(SD_CS, HIGH);
delay(4000);
if (!SD.begin(SD_CLOCK,SD_CS)) {
Serial.println(F("SD card failed!"));
}else{
Serial.println(F("SD card OK!"));
}
delay(2000);
while (!Serial);
if (flash.initialize())
Serial.println("Init OK!");
else
Serial.println("Init FAIL!");
delay(5000);
/*
if(SD.exists(F("SPI/damps/test.bin")) == true){//проверка есть ли файл дампа
SD.remove(F("SPI/damps/test.bin")); //если есть, то удалить
}
*/
for(int p = 0; p < 16; p++){
read_fram( p*128, 128);
}
digitalWrite(v3_3on, HIGH);//
}
void read_fram(word addr, word len){
digitalWrite(SD_CS, HIGH);
flash.readBytes_fram(addr, buf, len);//считывает 1-у страницу в буфер
Serial.print(F("Fram read to offseet 0x"));
Serial.println(addr, HEX);
for(int s = 0; s < len; s ++){
Serial.print(F("0x"));
if(buf[s] <= 0xF)Serial.print('0');
Serial.print(buf[s],HEX);
Serial.print(F(", "));
if((s+1)%16 == 0){
Serial.print(F(" | "));
for(int c = (s-16); c < s; c++){
Serial.print((char)buf[c]);
Serial.print(F(", "));
}
Serial.println();
}
}
Serial.println();
root = SD.open("SPI/damps/test.bin", FILE_WRITE);
root.seek(addr);//установить курсор в нужную позицию
root.write(buf, len);//записываем данные в файл
root.close();//закрываем файл.
delay(10);
}
void loop() {
// put your main code here, to run repeatedly:
}
Неактивний
Всем привет, задумал проект, заказал плату и сервопривод. Смысл в чем, что бы привод поворачивался в одну сторону, потом вернулся назад через несколько секунд и далее повтор через 24 часа. Посмотрел азы программирования и понял, что это совсем не мое)) Прошу оказать содействие в написании «скетча».
И вообще на сколько это реально или необходимо еще приобрести реле времени.
Заранее благодарен.
Всем привет, задумал проект, заказал плату и сервопривод. Смысл в чем, что бы привод поворачивался в одну сторону, потом вернулся назад через несколько секунд и далее повтор через 24 часа. Посмотрел азы программирования и понял, что это совсем не мое)) Прошу оказать содействие в написании «скетча».
И вообще на сколько это реально или необходимо еще приобрести реле времени.
Заранее благодарен.
А, какого !")(*"" вы со своим геморроем влезли в чужую тему, которая совершенно о другом !?!?!
Неактивний
У меня возникла проблема при чтении SPI FRAM FM25L16B в файл на SD карту - данные искажены, добавляет к некоторым битам логические единицы в то время когда там хранится ноль логический. ....
Библиотеку для spi флэш использовал стандартную лишь добавил в ее свои функции для чтения и записи этой FRAM страницами, все делал по этому даташиту.
И зачем было ломать библиотеку SD, а не сделать другую библиотеку? Это совершенно разные типы памяти.
Всем привет, задумал проект, заказал плату и сервопривод. Смысл в чем, что бы привод поворачивался в одну сторону, потом вернулся назад через несколько секунд и далее повтор через 24 часа. Посмотрел азы программирования и понял, что это совсем не мое)) Прошу оказать содействие в написании «скетча».
И вообще на сколько это реально или необходимо еще приобрести реле времени.
Заранее благодарен.
Дело не в том, что это не ваше. Дело в том, что это не совсем просто. Изучите и будет ваше. Здесь есть отдельная тема, для таких случаев: https://forum.arduino.ua/viewtopic.php?id=1069 .
Неактивний
Спасибо!
И зачем было ломать библиотеку SD, а не сделать другую библиотеку? Это совершенно разные типы памяти.
Вы не так поняли меня, я библиотеку SD card вообще не ломал, я только библиотеку для SPIFlash редактировал, добавил туда функции для поддержки FRAM и все. В общем решил (почти решил) эту проблему через одно место...
За счет больших ресурсов Arduino Due, сделал в своем программаторе PortableProg PRO (это мой автономный программатор, для которого все это и затеял, в Youtube есть.), что бы от начала загрузки не использовалось ни одной функции из библиотеки SD, затем содержимое FRAM целиком (всех 2 кБ) считывалось в буфер (переменную), а затем только использую функции библиотеки SD card, что бы сохранить в дамп-файл на SD Card содержимое буфера. Как бы так это все работает отлично, но только вот что делать с верификацией, ее то не проходит т.к. для записи из файла на SD card в SPI FRAM вначале используются функции библиотеки SD (например для открытия файла)?
Неактивний
... Как бы так это все работает отлично, но только вот что делать с верификацией, ее то не проходит т.к. для записи из файла на SD card в SPI FRAM вначале используются функции библиотеки SD (например для открытия файла)?
С моей точки зрения нужно сделать отдельный драйвер, для FM25L16B, и не будет проблем с конфликтами. Хотя, как говорится: "Хозяин - Барин".
Неактивний