Одно устройство i2cscanner, несколько адресов устройства

ZMEMW16
Вторник 18 августа 2015 г., 21:08
Я пытаюсь поговорить с I2C AT24C08, встроенным в доску, которая
STM32F103ZET6 Минимальная плата разработки системы ARM STM32 Cortex-M3 M75
от
http: // www.eBay.сопутствующий.Великобритания/ITM/291305557264? ... Ebidx%3ait

Сканер I2C (из примеров) показывает это Сканирование...
Устройство I2C найдено на адресе 0x50
Устройство I2C найдено на адресе 0x51
Устройство I2C найдено на адресе 0x52
Устройство I2C найдено на адресе 0x53
сделанный
Адрес устройства известен как 0x50, так что это просто плохое декодирование адреса или действительно возвращает 4 устройства?
Я склонен к первому :-)

В листе данных говорится, что один адрес и я пытаюсь написать, а затем читать обратно из места; упоминается
Повторяемый старт.

Итак, мой код C:\Users\Devan\Desktop\dfu-util-0.9-win64>dfu-util -d 0483:df11 -a 0 -s 0x08000000:leave -D test.bin dfu-util 0.9 Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc. Copyright 2010-2016 Tormod Volden and Stefan Schmidt This program is Free Software and has ABSOLUTELY NO WARRANTY Please report bugs to http://sourceforge.net/p/dfu-util/tickets/ Invalid DFU suffix signature A valid DFU suffix will be required in a future dfu-util release!!! Opening DFU capable USB device... ID 0483:df11 Run-time device DFU version 011a Claiming USB DFU Interface... Setting Alternate Setting #0 ... Determining device status: state = dfuERROR, status = 10 dfuERROR, clearing status Determining device status: state = dfuIDLE, status = 0 dfuIDLE, continuing DFU mode device DFU version 011a Device returned transfer size 2048 DfuSe interface name: "Internal Flash " Downloading to address = 0x08000000, size = 21544 Download [=========================] 100% 21544 bytes Download done. File downloaded successfully Transitioning to dfuMANIFEST state C:\Users\Devan\Desktop\dfu-util-0.9-win64>

Fredbox
Ср 19 августа 2015 г., 4:26
Я подозреваю, что плавучие адреса на 24C08, но схема показывает, что все адресные линии на EEPROM должны быть заземлены. Я считаю, что это схема для совета, которую у вас есть здесь. Схематический файл RAR содержит PDF или есть JPG здесь.

ZMEMW16
Ср 19 августа 2015 г. 8:46 утра
Я сделаю некоторое исследование с мультиметром и проверю соединения.
Все, как и ожидалось, на схему. b6/b7 to chip & 4K7 поступают от 4K67 до 3V3 PIN; Я живу с 0.64% низкий :-)

SPI Flash определенно помечена как Winbond 25x40bvn1g

Лист данных говорит Atmel AT24C08C, 8K Serial EEPROM: внутренне организованный с 64 страницами по 16 байтов каждый, 8K требует 10-битной
Адрес слова данных для случайной адресации слов.
Признание: все адреса и слова данных последовательно передаются в EEPROM и из EEPROM восьми битвами. А
Eeprom отправляет ноль, чтобы признать, что он получил каждое слово. Это происходит во время девятого цикла такта.
Маленькие маленькие B-это не они (таблицы данных :-)

Я использовал PB3 в качестве триггера для OLS и получал нагрузку побочного эффекта, поэтому переключился на PG14
Линия триггера теперь единственный импульс!

Стивен

ZMEMW16
Ср 19 августа 2015 г. 10:51
Хотя я отправляю 0x20, анализатор OLS I2C показывает, что он появляется как 0x40

Все данные SDA, по -видимому, охватывают 8 CLK и распространяются на первый импульс для следующей передачи

Как мне отправить набор из 9 часов, так как это то, что, кажется, сместит его осталось?

Стивен

Martinayotte
Ср 19 августа 2015 г., 14:56
ZMEMW16 написал:Хотя я отправляю 0x20, анализатор OLS I2C показывает, что он появляется как 0x40

ZMEMW16
Ср 19 августа 2015 г., 17:16
24C08 отображается в 0x50 и реагирует на адреса 0x50-0x53 от i2cscanner

То, что я пытался сделать, это установить место в чипе, из которого я хочу прочитать данные.

Осложением является то, что ему нужно 10-битное место, 0x00-0x3ff, которое я интерпретирую как отправку 2 байта;
И я продолжаю видеть внедорожник после первого.
другие есть
1. Повторное начало?
2. Девять тактовых циклов, я видел только любое упоминание о 9 битах в коде бит-бит i2c

Стивен

Fredbox
Ср 19 августа 2015 г., 18:16
Посмотрите на форум Ника Гаммонса здесь. Есть хорошее объяснение I2C с множеством картинок и примером использования EEPROM.

Martinayotte
Ср 19 августа 2015 г., 18:42
Хотя я не использую 24C08, а 24C512 (также по адресу 0x50), это должно быть довольно похоже. Я использую его на своем F4 без проблем.
Вот фрагмент кода:
#include #include #include // Core graphics library #include // Hardware-specific library #define TFT_CS PA2 #define TFT_RST PA4 #define TFT_DC PA3 #define TFT_SCK PA5 #define TFT_SDA PA7 #define LCDROTATION 2 Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST); // -----------------gps TinyGPSPlus gps; static const int RXPin = PB10, TXPin = PB11; static const uint32_t GPSBaud = 9600; SoftSerialIntAP ss(15, 16, 3); // (15, 16, 3)??? // -----------------gps // -----------------lcd screen heading void wyswietlaniegps() { tft.setTextSize(2); tft.setTextColor(ST7735_GREEN,0x0292); tft.setCursor(16,1); tft.print("GPS DATA"); tft.drawLine(0,17,127,17,ST7735_GREEN); } // -----------------lcd screen heading void setup() { Serial.begin(9600); ss.begin(GPSBaud); while (ss.available() > 0) gps.encode(ss.read()); tft.initR(INITR_BLACKTAB); // start ekranu tft.setRotation(LCDROTATION); // ustawienie obrotu ekranu tft.fillScreen(0x0292); // wypelnienie kolorem RGB565 wyswietlaniegps();} void loop() { Serial.println("TEST"); Serial.println("-----"); Serial.println(gps.location.lat(),6); Serial.println("_____"); delay(1000); tft.setTextSize(2); tft.setTextColor(ST7735_GREEN,0x0292); tft.setCursor(10,30); tft.print(gps.location.lat(),5); tft.setTextSize(2); tft.setTextColor(ST7735_GREEN,0x0292); tft.setCursor(10,60); tft.print(gps.location.lng(),6); tft.setTextSize(1); tft.setTextColor(ST7735_GREEN,0x0292); tft.setCursor(30,90); tft.print("**TEST**"); }

ZMEMW16
Ср 19 августа 2015 г., 20:09
код // The serial connection to the GPS device #define ss SERIAL1 // SoftwareSerial ss(RXPin, TXPin); ... ss.begin(GPSBaud); // this will use UART1 pins PA9/PA10

Martinayotte
Ср 19 августа 2015 г., 20:33
Ой ! Я нашел кое -что, что я полностью забыл, так как я долго использовал эти маленькие AT23C02/04/08, я использую более крупный ... ;)

Таблица данных http: // www.атмель.com/images/doc3256.PDF упомянуто, что адресация выполняется с помощью одного байта, более высокие биты из адреса должны быть связаны с адресом eEPROM, так что это не 2 байта адресации.
24c08.jpg
24C08.JPG (12.55 киб) просмотрено 1099 раз

ZMEMW16
Ср 19 августа 2015 г., 21:07
Это то, что биты P1/P0 в той фигуре, которую я выставляю!!

Рисунок 8-1. Адрес устройства
Площадь доступа к плотности бит 6 -битный 6 -битный 4 -битный 4 -битный 3 -битный 2 -битный 1 бит 0
8K eeprom 1 0 1 0 A2 P1 P0 R/W

На самом деле я совершенно уверен, что сделал находку на P1/P0, эта таблица - единственное место, где они встречаются
не должен был выходить из технических пабов таким образом
Стандартный доступ eEPROM: устройство EEPROM 4K и 8K требует 8-разрядного адреса устройства после начала
условие для включения чипа для операции чтения или записи. Слово адреса устройства состоит из обязательного “1010” (0xa)
Последовательность для первых четырех наиболее значимых битов (MSB), как показано на рисунке 8-1 на стр. 11. Это общепринято для всех
Устройства EEPROM.
4K EEPROM использует только биты устройства A2 и A1, а третий бит - бит адреса страницы памяти. А
Два бита адреса устройства должны сравниться с их соответствующими жестким входным выводами. PIN -код A0 не подключен.
8K EEPROM использует только адрес адреса устройства A2, а следующие два бита для адресации страницы памяти. A2
Адрес бит должен сравниться с соответствующим входным штифтом с жестким проводником. Булавки A1 и A0 не подключены.
Восьмой бит адреса устройства - это операция чтения/записи выберите бит. Операция чтения инициируется, если этот бит высок и
операция записи инициируется, если этот бит низкий.

ZMEMW16
Ср 19 августа 2015 г., 21:16
Это также объясняет ответы 0x50 - 0x53

Спасибо

Rogerclark
Ср 19 августа 2015 г. 22:04
Я погуглил, были ли существующие библиотеки для этого устройства, и нашел 2 или 3 разных библиотеки.

ИМХО, это, вероятно, работа, рассматривая либеральные либера

Martinayotte
Ср 19 августа 2015 г., 23:24
Да, я видел некоторое время назад, которые поддерживают все различные поведения чипов, просто предоставив ChipNo в конструкторе.
Я постараюсь найти его снова, либо на своих дисках, либо в сети ...
Итак, @zmemw16, у вас была возможность сделать реальное чтение/написать в свой ? ;)

ZMEMW16
Ср 19 августа 2015 г., 23:46
Итак, вот как выглядят ваши процедуры сейчас #include // -----------------gps TinyGPSPlus gps; #define ss3 Serial3 static const uint32_t GPSBaud = 9600; // -----------------gps void setup() { Serial.begin(9600); ss3.begin(GPSBaud); while (ss3.available() > 0) gps.encode(ss3.read()); } void loop() { Serial.println("TEST"); Serial.println(gps.location.lat(),6); Serial.println("_____"); delay(1000); }

Martinayotte
Чт 20 августа 2015 г. 12:04
ZMEMW16 написал:]
аполы, но >>0 казались посторонними :-)

ZMEMW16
Чт 20 августа 2015 г. 12:08
Я думал, что это выглядело немного в одной из ваших ссылок :-)

Стивен

Martinayotte
Чт 20 августа 2015 12:21
Martinayotte написал:Да, я видел некоторое время назад, которые поддерживают все различные поведения чипов, просто предоставив ChipNo в конструкторе.
Я постараюсь найти его снова, либо на своих дисках, либо в сети ...

Rogerclark
Чт 20 августа 2015 г., 21:41
Мартин

Спасибо

Я постараюсь проверить эту библиотеку на выходных. У меня есть несколько F103VET платы, из -за вина на eBay, а также 1 x F103ZET, все из которых имеют внешние Eeproms

ZMEMW16
Пт 21 августа 2015 1:49
Я добился некоторого успеха с этими процедурами, однако у меня постоянно появляется NACK.
Мне нужно снова посмотреть на диаграммы.

У меня также есть пара или более из 103 ветеринаров & Zet Boards, один или несколько имеют ЖК -подключения.
В ЖК -соединениях существует серьезный вариант. 32/36/37/40 PINS, 9 или 16 линий данных, SPI,/RD,/WR, Touch и т. Д

мой следующий вопрос: как узнать, как водить его? Я посмотрел на Cubemx, и, похоже, это было
капризы ветра относительно того, как настроен FMSC?
Но я подозреваю, что это еще одна ветка....

Стивен

Rogerclark
Пт 21 августа 2015 1:55
Ваш лучший вариант на F103VET и Zet пока не подойдет по маршруту Cubemx, если вы не хотите SDIO или, возможно, (хотя может иметь проблемы, поскольку он делится своей оперативной памятью с USB, что делает их практически эксклюзивным аппаратным обеспечением)

SPI и I2C прекрасно работают в кленовом ядре.

Различные дисплеи были перенесены, но в основном они являются разнообразием интерфейса I2C и SPI, однако я думаю, что несколько человек исследуют портирование некоторых из либеров для дисплеев параллельных соединений

У меня есть один из этих 3.2IN Touch + LCD + SD Экраны, которые имеют 16-битный путь данных к ЖК-дисплею, но у меня просто нет времени даже подключить эту вещь, не говоря уже о том, чтобы начать смотреть на библиотеки ;-(

ZMEMW16
Пт 21 августа 2015 г., 3:20 утра
Мой папа был инженером -механиком, который приобретал инструменты обычно древние; я, не практичный мех
Кто пошел по маршруту компьютеров, программного и аппаратного интерфейса - я, кажется, собираю разные электроники.
Держите меня от слишком много телевизионного дивана в течение долгих зимних вечеров :-)
Итак, у меня есть один или два 3.2 & Другие размеры TFT LCD + Touch + SD также

На самом деле я смотрел на Cubemx, так как мне приходится на это, что в какой -то момент эти «улучшенные» доски должны быть использованы, и как мы фактически можем реконструировать «адресация» улучшений.

Мысли из вариации LCD -разъемов, которые у меня есть до сих пор,
Мне нужно найти несколько 40 кабелей IDE, лишних длинных и трех разъемов.
Что действительно облегчит работу, так это обширные операции, 8 & 16 битов; может это уже существует?
Может быть, способ слияния «битов», чтобы вы могли прочитать/написать 8 или 16 битов, скрываясь так, как они могут быть разделены
PA0-PA3, PB4-PB7, PC0, PC3, PD4-PD9.
Мое оправдание это 0415
Стивен

Rogerclark
Пт 21 августа 2015 г., 3:57
Можно писать широкий порт, но для него нет API

Вам нужно написать в реестр выходных данных, но это действительно просто, я думаю, это что -то вроде
uint32_t time; void loop() { if ( (millis()-time)<1000 ) { if (ss3.available()) gps.encode(ss3.read()); } time = millis(); Serial.println("TEST"); Serial.println(gps.location.lat(),6); Serial.println("_____"); }