I have now been able to write to the eeprom. First I wrote a file with 30 bytes of data, then I calculated the crc16 (pol 8005) and inverted the result bit wise. int main(void) { uint8_t buf[32]; uint16_t crc; std::ofstream out_file;
crc = 0; for (int idx = 0; idx < 30; idx++) { buf[idx] = idx + 49; // fill buffer with data crc = crc16_byte_8005(crc, buf[idx]); } buf[30] = ~((uint8_t)((crc & 0x00FF))); buf[31] = ~((uint8_t)((crc & 0xFF00) >> 8)); out_file.open ("/home/debian/test/c_file"); if(out_file.is_open()) { out_file.write((char *)(&buf), 32); out_file.close(); } return 0; } The final file I could both write and read to eeprom. debian@beaglebone:~/test$ cat c_file > /sys/bus/w1/devices/23-000002eddd9b/eeprom debian@beaglebone:~/test$ cat /sys/bus/w1/devices/23-000002eddd9b/eeprom | hexdump 0000000 3231 3433 3635 3837 3a39 3c3b 3e3d 403f 0000010 4241 4443 4645 4847 4a49 4c4b 4e4d 63ba 0000020 0000 0000 0000 0000 0000 0000 0000 0000 * 0000200 So to use the eeprom without crc on every page the driver needs to be re-compiled with other options. onsdag 30 september 2020 kl. 14:40:40 UTC+2 skrev Johan Lind: > I think we're getting closer to the truth now. > > Reading the source code and especially this section is interesting: > #ifdef CONFIG_W1_SLAVE_DS2433_CRC > <http://sbexr.rabexc.org/latest/sources/0f/5e84f0288ea608.html#00b1600900b16024> > > /* can only write full blocks in cached mode */ > if ((off > <http://sbexr.rabexc.org/latest/sources/2d/f15386f9fe4f5a.html#000cd008000cd00f> > > & W1_PAGE_MASK > <http://sbexr.rabexc.org/latest/sources/2d/f15386f9fe4f5a.html#0001f0090001f017>) > > || (count > <http://sbexr.rabexc.org/latest/sources/2d/f15386f9fe4f5a.html#000cd014000cd01b> > > & W1_PAGE_MASK > <http://sbexr.rabexc.org/latest/sources/2d/f15386f9fe4f5a.html#0001f0090001f017>)) > > { > dev_err > <http://sbexr.rabexc.org/latest/sources/1c/d25b2fb3f904be.html#000670090006802b>(&sl->dev, > > "invalid offset/count off=%d cnt=%zd\n", (int)off, count); > return -EINVAL > <http://sbexr.rabexc.org/latest/sources/7f/c1319580667ad5.html#0001a0090001a011>; > > } > /* make sure the block CRCs are valid */ > for (idx > <http://sbexr.rabexc.org/latest/sources/2d/f15386f9fe4f5a.html#000d0002000d0011> > > = 0; idx > <http://sbexr.rabexc.org/latest/sources/2d/f15386f9fe4f5a.html#000d0002000d0011> > > < count > <http://sbexr.rabexc.org/latest/sources/2d/f15386f9fe4f5a.html#000cd014000cd01b>; > > idx > <http://sbexr.rabexc.org/latest/sources/2d/f15386f9fe4f5a.html#000d0002000d0011> > > += W1_PAGE_SIZE > <http://sbexr.rabexc.org/latest/sources/2d/f15386f9fe4f5a.html#0001d0090001d017>) > > { > if (crc16 > <http://sbexr.rabexc.org/latest/sources/0d/c2946195028c93.html#0001400100014037> > (CRC16_INIT > <http://sbexr.rabexc.org/latest/sources/2d/f15386f9fe4f5a.html#0001200900012015>, > > &buf > <http://sbexr.rabexc.org/latest/sources/2d/f15386f9fe4f5a.html#000cc028000cc02e> > [idx > <http://sbexr.rabexc.org/latest/sources/2d/f15386f9fe4f5a.html#000d0002000d0011>], > > W1_PAGE_SIZE > <http://sbexr.rabexc.org/latest/sources/2d/f15386f9fe4f5a.html#0001d0090001d017>) > > != CRC16_VALID > <http://sbexr.rabexc.org/latest/sources/2d/f15386f9fe4f5a.html#0001300900013016>) > > { > dev_err > <http://sbexr.rabexc.org/latest/sources/1c/d25b2fb3f904be.html#000670090006802b>(&sl->dev, > > "bad CRC at offset %d\n", (int)off); > return -EINVAL > <http://sbexr.rabexc.org/latest/sources/7f/c1319580667ad5.html#0001a0090001a011> > ; > } } > > If I try to run these commands: > echo "12345678901234567890123456789012" > > /sys/bus/w1/devices/23-000002eddd9b/eeprom > echo "1234567890123456789012345678901" > > /sys/bus/w1/devices/23-000002eddd9b/eeprom > dmesg | tail > [80808.027040] w1_slave_driver 23-000002eddd9b: invalid offset/count off=0 > cnt=33 > [80829.659168] w1_slave_driver 23-000002eddd9b: bad CRC at offset 0 > > I removed some output from my terminal and focused on these lines. > The errors found using dmesg looks to come from this section in the > driver. If I send 33 bytes I get the invalid offset/count error and with 32 > bytes I pass this section and get crc error. > Now I have to try to manually calculating the crc and see where it takes > me. > > onsdag 30 september 2020 kl. 13:16:09 UTC+2 skrev Sven Norinder: > >> Maybe kernel must have crc enabled for 2433 writes? >> Last line implies something about writes. >> >> config W1_SLAVE_DS2433 >> tristate "4kb EEPROM family support (DS2433)" >> help >> Say Y here if you want to use a 1-wire >> 4kb EEPROM family device (DS2433). >> >> config W1_SLAVE_DS2433_CRC >> bool "Protect DS2433 data with a CRC16" >> depends on W1_SLAVE_DS2433 >> select CRC16 >> help >> Say Y here to protect DS2433 data with a CRC16. >> Each block has 30 bytes of data and a two byte CRC16. >> Full block writes are only allowed if the CRC is valid. >> >> /Sven >> >> onsdag 30 september 2020 kl. 10:56:55 UTC+2 skrev Johan Lind: >> >>> Well, I have an i2c memory on the same board and to read and write to >>> that I can use the following commands: >>> write >>> cat data.eeprom > /sys/bus/i2c/devices/2-0057/eeprom >>> read >>> cat /sys/bus/i2c/devices/2-0057/eeprom | hexdump >>> >>> I did try your suggestion of using dd but I could not get it to work. >>> root@beaglebone:/home/debian# dd if=/dev/zero >>> of=/sys/bus/w1/devices/23-000002eddd9b/eeprom bs=32 >>> dd: error writing '/sys/bus/w1/devices/23-000002eddd9b/eeprom': Invalid >>> argument >>> 1+0 records in >>> 0+0 records out >>> 0 bytes copied, 0.0159578 s, 0.0 kB/s >>> root@beaglebone:/home/debian# >>> >>> As the eeprom is written to contain data on another device, so I thought >>> it would be enough to use /dev/zero as input. >>> Reading out data show no change of content (as expected consider the >>> output from dd) >>> cat /sys/bus/w1/devices/23-000002eddd9b/eeprom | hexdump >>> 0000000 00ff 55aa 00ff 55aa 00ff 55aa 00ff 55aa >>> onsdag 30 september 2020 kl. 07:15:53 UTC+2 skrev Sven Norinder: >>> >>>> The eeprom probably is a device, not a filesystem. >>>> Use dd instead. >>>> /Sven >>>> >>>> tisdag 29 september 2020 kl. 17:59:14 UTC+2 skrev Johan Lind: >>>> >>>>> I tried with only a short (6 bytes) string but still the same >>>>> behaviour. >>>>> >>>>> >>>>> tisdag 29 september 2020 kl. 17:45:47 UTC+2 skrev >>>>> robert.sty...@gmail.com: >>>>> >>>>>> I suggest trying to write less than 32 bytes (the dmesg implies >>>>>> something wrong with offset or count) -- create a file of less than 32 >>>>>> bytes and copy to eeprom >>>>>> cd ~ >>>>>> echo "1234567890" > file10 >>>>>> cp -T file10 /sys/bus/w1/devices/23-000002eddd9b/eeprom >>>>>> >>>>>> In the data sheet you need a much smaller R[PU] to write than read >>>>>> https://datasheets.maximintegrated.com/en/ds/DS2433.pdf >>>>>> >>>>>> On Tuesday, 29 September 2020 at 16:03:48 UTC+1 RobertCNelson wrote: >>>>>> >>>>>>> On Tue, Sep 29, 2020 at 9:55 AM 'Johan Lind' via BeagleBoard >>>>>>> <beagl...@googlegroups.com> wrote: >>>>>>> > >>>>>>> > Yes, it does still show eeprom >>>>>>> > >>>>>>> > debian@beaglebone:~$ ls /sys/bus/w1/devices/23-000002eddd9b >>>>>>> > driver eeprom id name power subsystem uevent >>>>>>> > debian@beaglebone:~$ ls /sys/bus/w1/devices/ >>>>>>> > 23-000002eddd9b w1_bus_master1 >>>>>>> > debian@beaglebone:~$ >>>>>>> > debian@beaglebone:~$ ls -al /sys/bus/w1/devices/23-000002eddd9b/ >>>>>>> > total 0 >>>>>>> > drwxrwxr-x 3 root gpio 0 Sep 29 14:00 . >>>>>>> > drwxrwxr-x 4 root gpio 0 Sep 29 14:00 .. >>>>>>> > lrwxrwxrwx 1 root gpio 0 Sep 29 14:00 driver -> >>>>>>> ../../../bus/w1/drivers/w1_slave_driver >>>>>>> > -rw-rw-r-- 1 root gpio 512 Sep 29 14:07 eeprom >>>>>>> >>>>>>> Side note, you don't' have to be root, the "gpio" group is the >>>>>>> default >>>>>>> for debian.. >>>>>>> >>>>>>> > -r--r--r-- 1 root gpio 4096 Sep 29 14:00 id >>>>>>> > -r--r--r-- 1 root gpio 4096 Sep 29 14:00 name >>>>>>> > drwxrwxr-x 2 root gpio 0 Sep 29 14:00 power >>>>>>> > lrwxrwxrwx 1 root gpio 0 Sep 29 14:00 subsystem -> ../../../bus/w1 >>>>>>> > -rw-rw-r-- 1 root gpio 4096 Sep 29 14:00 uevent >>>>>>> > debian@beaglebone:~$ >>>>>>> >>>>>>> not sure why you can't write... >>>>>>> >>>>>>> Regards, >>>>>>> >>>>>>> -- >>>>>>> Robert Nelson >>>>>>> https://rcn-ee.com/ >>>>>>> >>>>>> -- For more options, visit http://beagleboard.org/discuss --- You received this message because you are subscribed to the Google Groups "BeagleBoard" group. To unsubscribe from this group and stop receiving emails from it, send an email to beagleboard+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/beagleboard/76cf8892-1929-470f-928a-be972e52742bn%40googlegroups.com.