#1 2020-02-29 20:53:52

Krepton85
Участник
Зарегистрирован: 2017-11-24
Сообщений: 8

Конфликт FRAM FM25L16B и SD card при чтении FRAM.

У меня возникла проблема при чтении 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:
  

}

#2 2020-03-02 14:09:45

гость777
Гость

Re: Конфликт FRAM FM25L16B и SD card при чтении FRAM.

Всем привет, задумал проект, заказал плату и сервопривод. Смысл в чем, что бы привод поворачивался в одну сторону, потом вернулся назад через несколько секунд и далее повтор через 24 часа. Посмотрел азы программирования и понял, что это совсем не мое)) Прошу оказать содействие в написании «скетча».
И вообще на сколько это реально или необходимо еще приобрести реле времени.
Заранее благодарен.

#3 2020-03-02 15:37:41

renoshnik
Участник
Зарегистрирован: 2017-04-03
Сообщений: 771

Re: Конфликт FRAM FM25L16B и SD card при чтении FRAM.

гость777 пишет:

Всем привет, задумал проект, заказал плату и сервопривод. Смысл в чем, что бы привод поворачивался в одну сторону, потом вернулся назад через несколько секунд и далее повтор через 24 часа. Посмотрел азы программирования и понял, что это совсем не мое)) Прошу оказать содействие в написании «скетча».
И вообще на сколько это реально или необходимо еще приобрести реле времени.
Заранее благодарен.

А, какого !")(*"" вы со своим геморроем влезли в чужую тему, которая совершенно о другом  !?!?!

#4 2020-03-02 20:47:54

Вячеслав Азаров
Участник
Зарегистрирован: 2017-05-25
Сообщений: 1,732

Re: Конфликт FRAM FM25L16B и SD card при чтении FRAM.

Krepton85 пишет:

У меня возникла проблема при чтении SPI FRAM FM25L16B в файл на SD карту - данные искажены, добавляет  к некоторым битам логические единицы в то время когда там хранится ноль логический. ....
Библиотеку для spi флэш использовал стандартную лишь добавил в ее свои функции для чтения и записи этой FRAM страницами, все делал по этому даташиту.

И зачем было ломать библиотеку SD, а не сделать другую библиотеку? Это совершенно разные типы памяти. 

гость777 пишет:

Всем привет, задумал проект, заказал плату и сервопривод. Смысл в чем, что бы привод поворачивался в одну сторону, потом вернулся назад через несколько секунд и далее повтор через 24 часа. Посмотрел азы программирования и понял, что это совсем не мое)) Прошу оказать содействие в написании «скетча».
И вообще на сколько это реально или необходимо еще приобрести реле времени.
Заранее благодарен.

Дело не в том, что это не ваше. Дело в том, что это не совсем просто. Изучите и будет ваше. Здесь есть отдельная тема, для таких случаев: https://forum.arduino.ua/viewtopic.php?id=1069 .

#5 2020-03-03 06:23:40

гость777
Гость

Re: Конфликт FRAM FM25L16B и SD card при чтении FRAM.

Спасибо!

#6 2020-03-07 12:29:25

Krepton85
Участник
Зарегистрирован: 2017-11-24
Сообщений: 8

Re: Конфликт FRAM FM25L16B и SD card при чтении FRAM.

Вячеслав Азаров пишет:

И зачем было ломать библиотеку SD, а не сделать другую библиотеку? Это совершенно разные типы памяти.

Вы не так поняли меня, я библиотеку SD card вообще не ломал, я только библиотеку для SPIFlash редактировал, добавил туда функции для поддержки FRAM и все. В общем решил (почти решил) эту проблему через одно место...
За счет   больших ресурсов Arduino Due, сделал в своем программаторе PortableProg PRO (это мой автономный программатор, для которого все это и затеял, в Youtube есть.), что бы от начала загрузки не использовалось ни одной функции из библиотеки SD, затем содержимое FRAM целиком (всех 2 кБ) считывалось в буфер (переменную), а затем только использую функции библиотеки SD card, что бы сохранить в дамп-файл на SD Card содержимое буфера. Как бы так это все работает отлично, но только вот что делать с верификацией, ее то не проходит т.к. для записи из  файла на SD card в SPI FRAM вначале используются функции библиотеки SD (например для открытия файла)? roll

#7 2020-03-07 12:47:53

Вячеслав Азаров
Участник
Зарегистрирован: 2017-05-25
Сообщений: 1,732

Re: Конфликт FRAM FM25L16B и SD card при чтении FRAM.

Krepton85 пишет:

... Как бы так это все работает отлично, но только вот что делать с верификацией, ее то не проходит т.к. для записи из  файла на SD card в SPI FRAM вначале используются функции библиотеки SD (например для открытия файла)? roll

С моей точки зрения нужно сделать отдельный драйвер, для FM25L16B, и не будет проблем с конфликтами. Хотя, как говорится: "Хозяин - Барин".

Быстрое сообщение

Введите сообщение и нажмите Отправить

Подвал раздела