From b4ecd612f7184cbf23d83ef78b0ccb5ed2c318e3 Mon Sep 17 00:00:00 2001 From: Tomasz Moń Date: Sat, 10 Jul 2021 08:56:32 +0200 Subject: Sansa Connect: Use deviceid in USB Serial Number Atmel AT88SC6416C CryptoMemory is almost I2C compatible. The device is connected to bitbanged I2C bus shared with compliant I2C devices. Change-Id: Iec54702db1bdfb93c01291eef18ec60391c63b16 --- .../sansa-connect/cryptomem-sansaconnect.c | 80 ++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 firmware/target/arm/tms320dm320/sansa-connect/cryptomem-sansaconnect.c (limited to 'firmware/target/arm/tms320dm320/sansa-connect/cryptomem-sansaconnect.c') diff --git a/firmware/target/arm/tms320dm320/sansa-connect/cryptomem-sansaconnect.c b/firmware/target/arm/tms320dm320/sansa-connect/cryptomem-sansaconnect.c new file mode 100644 index 0000000000..ac01525500 --- /dev/null +++ b/firmware/target/arm/tms320dm320/sansa-connect/cryptomem-sansaconnect.c @@ -0,0 +1,80 @@ +/*************************************************************************** +* __________ __ ___. +* Open \______ \ ____ ____ | | _\_ |__ _______ ___ +* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / +* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < +* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ +* \/ \/ \/ \/ \/ +* $Id: $ +* +* Copyright (C) 2021 by Tomasz Moń +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or (at your option) any later version. +* +* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +* KIND, either express or implied. +* +****************************************************************************/ + +#include +#include "cryptomem-sansaconnect.h" +#include "i2c-dm320.h" + +/* Command values */ +#define WRITE_USER_ZONE 0xB0 +#define READ_USER_ZONE 0xB2 +#define SYSTEM_WRITE 0xB4 +#define SYSTEM_READ 0xB6 +#define VERIFY_CRYPTO 0xB8 +#define VERIFY_PASSWORD 0xBA + +/* SYSTEM_WRITE ADDR 1 values */ +#define WRITE_CONFIG 0x00 +#define WRITE_FUSES 0x01 +#define SEND_CHECKSUM 0x02 +#define SET_USER_ZONE 0x03 + +int cryptomem_read_deviceid(char deviceid[32]) +{ + int ret; + unsigned int i; + unsigned char cmd_data[3]; + + /* It is assumed that other I2C communication has already taken place + * (e.g. power_init()) before this function is called and thus we don't + * have to send atleast 5 dummy clock cycles here. + */ + + cmd_data[0] = SET_USER_ZONE; + cmd_data[1] = 0; + cmd_data[2] = 0; + ret = i2c_write(SYSTEM_WRITE, cmd_data, sizeof(cmd_data)); + if (ret < 0) + { + return ret; + } + + cmd_data[0] = 0; + cmd_data[1] = 0; + cmd_data[2] = 32; + ret = i2c_write_read_bytes(READ_USER_ZONE, cmd_data, sizeof(cmd_data), + deviceid, 32); + if (ret < 0) + { + return ret; + } + + /* Verify that deviceid contains only printable ASCII characters */ + for (i = 0; i < 32; i++) + { + if (!isprint(deviceid[i])) + { + return -1; + } + } + + return 0; +} -- cgit v1.2.3