ds2430 как записать данные в память

teslarvz
Offline
Зарегистрирован: 20.03.2019

Здравствуйте всем! Не могу записать данные в память ds2430. Пользую этот код программы ,читает все хорошо , а записывать не записывает.

#include <DS2431.h>
#include <OneWire.h>
 
const int ONE_WIRE_PIN = 10; // One Wire pin, change according to your needs. A 4.7k pull up resistor is needed.
 
OneWire oneWire(ONE_WIRE_PIN);
DS2431 eeprom(oneWire);
 
void setup()
{
  Serial.begin(115200);
  while (!Serial); // wait for Serial to come up on USB boards
 
  // Search the 1-Wire bus for a connected device.
  byte serialNb[8];
  oneWire.target_search(DS2431::ONE_WIRE_FAMILY_CODE);
  if (!oneWire.search(serialNb))
  {
    Serial.println("No DS2431 found on the 1-Wire bus.");
    return;
  }
 
  // Check serial number CRC
  if (oneWire.crc8(serialNb, 7) != serialNb[7])
  {
    Serial.println("A DS2431 was found but the serial number CRC is invalid.");
    return;
  }
 
  Serial.print("DS2431 found with serial number : ");
  printBuffer(serialNb, 8);
  Serial.println("");
 
  // Initialize DS2431 object
  eeprom.begin(serialNb);
 
  // Read all memory content
  byte data[16];
  eeprom.read(0, data, sizeof(data));
 
  Serial.println("Memory contents : ");
  printLargeBuffer(data, sizeof(data));
  Serial.println("");
 
  // Write a 8-byte row
  byte newData[8] = {1,2,3,4,5,6,7,8};
  word address = 1;
  
  if (eeprom.write(address, newData, sizeof(newData)))
  {
    Serial.print("Successfully wrote new data @ address ");
    Serial.println(address);
  }
  else
  {
    Serial.print("Failed to write data @ address ");
    Serial.println(address);
  }
  Serial.println("");
 
  // Read again memory content
  eeprom.read(0, data, sizeof(data));
 
  Serial.println("Memory contents : ");
  printLargeBuffer(data, sizeof(data));
  Serial.println("");
 
  // Read single byte
  Serial.print("Data @ address ");
  Serial.print(address);
  Serial.print(" : ");
  Serial.println(eeprom.read(address));
}
 
void loop()
{
  // Nothing to do
}
 
void printBuffer(const uint8_t *buf, uint8_t len)
{
  for (int i = 0; i < len-1; i++)
  {
    Serial.print(buf[i], HEX);
    Serial.print(",");
  }
  Serial.println(buf[len-1], HEX);
}
 
void printLargeBuffer(const uint8_t *buf, uint16_t len)
{
  uint8_t bytesPerLine = 8;
 
  for (int i = 0; i < len / bytesPerLine; i++)
  {
    Serial.print(i * bytesPerLine);
    Serial.print("\t\t:");
    printBuffer(buf + i * bytesPerLine, bytesPerLine);
  }
}
teslarvz
Offline
Зарегистрирован: 20.03.2019

В даполнение выдает такие данные

 No DS2431 found on the 1-Wire bus.

DS2431 found with serial number : *********
 
Memory contents : 
0 :47,6D,15,41,73,C8,5A,17
8 :3C,85,A4,73,C8,B0,F0,A5
 
Failed to write data @ address 0
 
Memory contents : 
0 :47,6D,15,41,73,C8,5A,17
8 :3C,85,A4,73,C8,B0,F0,A5
 
Data @ address 0 : 71
 
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

1. Изучите вот эту  тему

2. перепостите заново (в этой же теме, новым постом)

teslarvz
Offline
Зарегистрирован: 20.03.2019

Здравствуйте всем! Не могу записать данные в память ds2430. Пользую этот код программы ,читает все хорошо , а записывать не записывает.

#include <DS2431.h>
#include <OneWire.h>
 
const int ONE_WIRE_PIN = 10; // One Wire pin, change according to your needs. A 4.7k pull up resistor is needed.
 
OneWire oneWire(ONE_WIRE_PIN);
DS2431 eeprom(oneWire);
 
void setup()
{
  Serial.begin(115200);
  while (!Serial); // wait for Serial to come up on USB boards
 
  // Search the 1-Wire bus for a connected device.
  byte serialNb[8];
  oneWire.target_search(DS2431::ONE_WIRE_FAMILY_CODE);
  if (!oneWire.search(serialNb))
  {
    Serial.println("No DS2431 found on the 1-Wire bus.");
    return;
  }
 
  // Check serial number CRC
  if (oneWire.crc8(serialNb, 7) != serialNb[7])
  {
    Serial.println("A DS2431 was found but the serial number CRC is invalid.");
    return;
  }
 
  Serial.print("DS2431 found with serial number : ");
  printBuffer(serialNb, 8);
  Serial.println("");
 
  // Initialize DS2431 object
  eeprom.begin(serialNb);
 
  // Read all memory content
  byte data[16];
  eeprom.read(0, data, sizeof(data));
 
  Serial.println("Memory contents : ");
  printLargeBuffer(data, sizeof(data));
  Serial.println("");
 
  // Write a 8-byte row
  byte newData[8] = {1,2,3,4,5,6,7,8};
  word address = 1;
  
  if (eeprom.write(address, newData, sizeof(newData)))
  {
    Serial.print("Successfully wrote new data @ address ");
    Serial.println(address);
  }
  else
  {
    Serial.print("Failed to write data @ address ");
    Serial.println(address);
  }
  Serial.println("");
 
  // Read again memory content
  eeprom.read(0, data, sizeof(data));
 
  Serial.println("Memory contents : ");
  printLargeBuffer(data, sizeof(data));
  Serial.println("");
 
  // Read single byte
  Serial.print("Data @ address ");
  Serial.print(address);
  Serial.print(" : ");
  Serial.println(eeprom.read(address));
}
 
void loop()
{
  // Nothing to do
}
 
void printBuffer(const uint8_t *buf, uint8_t len)
{
  for (int i = 0; i < len-1; i++)
  {
    Serial.print(buf[i], HEX);
    Serial.print(",");
  }
  Serial.println(buf[len-1], HEX);
}
 
void printLargeBuffer(const uint8_t *buf, uint16_t len)
{
  uint8_t bytesPerLine = 8;
 
  for (int i = 0; i < len / bytesPerLine; i++)
  {
    Serial.print(i * bytesPerLine);
    Serial.print("\t\t:");
    printBuffer(buf + i * bytesPerLine, bytesPerLine);
  }
}

В даполнение выдает такие данные

 No DS2431 found on the 1-Wire bus.

DS2431 found with serial number : *********
 
Memory contents : 
0 :47,6D,15,41,73,C8,5A,17
8 :3C,85,A4,73,C8,B0,F0,A5
 
Failed to write data @ address 0
 
Memory contents : 
0 :47,6D,15,41,73,C8,5A,17
8 :3C,85,A4,73,C8,B0,F0,A5
 
Data @ address 0 : 71
teslarvz
Offline
Зарегистрирован: 20.03.2019

Да ответов и советов куча ! У меня все получилось . Пишите кому интересно.

-NMi-
Offline
Зарегистрирован: 20.08.2018

Мне не интересно про 2431. Интересно другое, если в вашем софте использовать более ОДНОЙ 2431 - софт будет работать?

teslarvz
Offline
Зарегистрирован: 20.03.2019

Нет я думаю!

 

blokerun2
Offline
Зарегистрирован: 27.01.2019

teslarvz пишет:

Нет я думаю!

 

 а если несколько DS2431 подключить на разные пины и создать несколько экземпляров класса DS2431 и OneWire. Будет работать?

bahn
Offline
Зарегистрирован: 24.08.2016

Приветствую! Мне интересно. Судя по всему разная организация памяти. Что получилось?

 

alexpan7
Offline
Зарегистрирован: 19.03.2021

Мне очень интересно. К сожалению я не большой специалист в этих вопросах, но есть насущная необходимость записать информацию на эту микросхему.

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Дико извиняюсь за оффтоп, но может мне кто-нибудь из участников темы объяснить физический или экономический смысл применения 1Wire EEPROM и ее преимущества перед i2c EEPROM типа AT24хххх ?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

На тиньке 1 пин занимает

7514348
Offline
Зарегистрирован: 20.09.2021

Есть интерес по данному вопросу.

 

star1k
Offline
Зарегистрирован: 29.11.2021

Напишите пожалуйста как у вас получилось записать данные?

ddr2
Offline
Зарегистрирован: 27.12.2020

Здесь скорее интересно, для каких задач могут понадобится 32 байта памяти с доступом через протокол? 

bahn
Offline
Зарегистрирован: 24.08.2016

кому нужна память ddr2?

 

teslarvz
Offline
Зарегистрирован: 20.03.2019
#include <OneWire.h>
OneWire  ds(10);    
byte     addr[8]; 
void setup(void)  
{
 Serial.begin(9600); 
}
void loop(void) 
{
ReadAllMem();
while(1); 
}
void ReadAllMem() //функция чтения памяти
{
 ds.reset();
 ds.write(0xCC);//пропуск rom
 ds.write(0x0F,1);  // запись блокнотной памяти
 ds.write(0x00,1);//начальный адрес с которого начинается запись в блокнот
// ds.write(0x00,1);
 ds.write(0x8B,1);
 ds.write(0xCB,1);
 ds.write(0xF4,1);
 ds.write(0x90,1);
 ds.write(0xBB,1);
 ds.write(0xB8,1);
 ds.write(0x50,1);
 ds.write(0x13,1);
 ds.write(0x76,1);
 ds.write(0x8C,1);
 ds.write(0x33,1);
 ds.write(0x7,1);
 ds.write(0x72,1);
 ds.write(0xC5,1);
 ds.write(0xC4,1);
 ds.write(0x89,1);
 ds.write(0x8B,1);
 ds.write(0xCB,1);
 ds.write(0xF4,1);
 ds.write(0x90,1);
 ds.write(0xBB,1);
 ds.write(0xB8,1);
 ds.write(0x50,1);
 ds.write(0x13,1);
 ds.write(0x76,1);
 ds.write(0x8C,1);
 ds.write(0x33,1);
 ds.write(0x7,1);
 ds.write(0x72,1);
 ds.write(0xC5,1);
 ds.write(0xC4,1);
 ds.write(0x89,1);
 ds.reset();
ds.write(0xCC); //пропуск rom
 ds.write(0xAA); //чтение блокнотной памяти
 ds.write(0x00);  // начальный адрес для чтения 
  ds.read();
 //delay(2);
 ds.reset();
 ds.write(0xCC); //пропуск rom
 ds.write(0x55); // копирование блокнота в ЭСППЗУ
 ds.write(0xA5); //ключ достоверности
 delay(10); // пауза 10mc
 ds.reset();
 ds.write(0xCC); // чтение всей памяти ЭСППЗУ
 ds.write(0xF0);
 ds.write(0x00);
 ds.read();
 ds.reset();
 ds.write(0xCC);
 ds.write(0x66); // чтение состояния прикладного регистра
  ds.write(0x00F); // ключ достоверности
 ds.read();
  ds.reset();
  ds.write(0xC3);
  ds.write(0x00);
  ds.write(0xAA);
  ds.read();
}

 

teslarvz
Offline
Зарегистрирован: 20.03.2019

[quote=star1k]

Напишите пожалуйста как у вас получилось записать данные

В сети есть документация на эту микросхему или более новую там все четко указано как записать.

Файлы в сети не работают с ардуиной на запись скорость код сЪедает тайминги не совпадают.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

bahn пишет:

кому нужна память ddr2?

объём?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ua6em пишет:

bahn пишет:

кому нужна память ddr2?

объём?

см. пост №14