Отговори на тема  [ 10 мнения ] 
Проблем с i2c шина 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пет Дек 07, 2007 1:21 pm
Мнения: 31
Местоположение: Varna
Мнение Проблем с i2c шина
Здравейте.
Имам странен проблем с шината и не ми идва нищо на ум затова моля ако някой се е сблъсквал с такъв проблем или ако има идея да помага.
Използвам MSSP модул в режим I2C за връзка с външен EEPROM. Микроконтролерът е PIC18F45K80, OSC - HS 16MHz х 4PLL тактова честота 64MHz. Паметта е 24LC64. Проблемът е следния. Записвам в EEPROM-а без проблем, но чета от него вярно единствено когато докосна с пръст(или със сондата на осцилоскопа) SCL линията на магистралата. Иначе програмата зацикля до момента в който се чака приемането на битовете от slave и съответно установяването в единица на бит SSPIF
bcf PIR1,SSPIF
bsf SSPCON2,RCEN
btfss PIR1,SSPIF
bra $-2
Регистър SSPADD е зареден с константа 0х09. 16000000/4*(9+1) = 400000 = 400KHz. Интересното е,че когато променя стойността на тази константа това не влияе на записа в паметта. Записва вярно (което е странно). При четене обаче, при стойност различна от 0х09 програмата не зацикля, но винаги чета 0xFF. Другото странно нещо при стойност 0х09 е че с осцилоскопа на линия SCL виждам импулси с период 1 микро секунда (1MHz), а не 2.5 (400KHz) както би трябвало да бъде. При стойност 0х24 периода вече е 2.5 микро секунди, но тогава не чета вярно. Пробвах с различни стойност на изтеглящите резистори: 10к, 5к, 2,2к, и 1,5к. резултата е същия. Също така програмата работи само при забранен Slew Rate Control, SSPSTAT,SMP = 1. PORTC,3 и PORTC,4 са конфигурирани като входове, а в регистър SSPCON1 е записана константа В'00101000'. От къде може да идва проблемът?
Благодаря!


Чет Окт 24, 2013 10:09 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 12, 2004 3:38 pm
Мнения: 9103
Местоположение: Chicago, IL
Мнение Re: Проблем с i2c шина
Свали първо честотата на клока на нещо от сорта на 100kHz за да се убедиш, че всичко работи на бавна скорост и после вдигай постепенно. Ако наистина я мъчиш на 1MHz най-вероятно е това и естествено опроводяването на самата платка може да не е както трябва. Затова първо свали клока и като тръгне стабилно всичко тогава вдигай и търси къде е ключа за бараката :) .


Чет Окт 24, 2013 10:18 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Чет Мар 19, 2009 8:33 pm
Мнения: 804
Мнение Re: Проблем с i2c шина
И аз имам подобно предположение.
Нещо между пътечките/пиновете на елементите.
Презапои ги, и почисти с нещо ( ацетон/кореселин).
Скоро имах подобен проблем с памет. Като пипна с пръст започва да дава данни. Или като я намокря с ацетон. После като поизсъхне , пак за забутват данните.
Минах с тънка игла, м/у пиновете и се оправи работата.


Чет Окт 24, 2013 11:46 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Авг 23, 2005 12:02 pm
Мнения: 3070
Местоположение: София
Мнение Re: Проблем с i2c шина
С почти същия процесор и със съвсем същата памет, на около 10 сантиметра от процесора, навързана на обща шина с един DAC + 2 потенциометъра. Никакви грижи. Всичко си тръгна от раз. Търси някакъв хардуерен проблем според мен.


Пет Окт 25, 2013 12:04 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 10, 2005 3:25 pm
Мнения: 5677
Местоположение: София
Мнение Re: Проблем с i2c шина
Nikolay_90 написа:
OSC - HS 16MHz х 4PLL тактова честота 64MHz ........... 16000000/4*(9+1) = 400000 = 400KHz....


Пет Окт 25, 2013 7:22 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пет Дек 07, 2007 1:21 pm
Мнения: 31
Местоположение: Varna
Мнение Re: Проблем с i2c шина
Благодаря за бързите отговори.
Оказа се, че като забраня PLL всичко работи нормално. Чете и записва на 100KHz при SSPADD = 0х27 и на 400KHz при SSPADD = 0х09 както е по таблицата.
Desert Leo написа:
Nikolay_90 написа:
OSC - HS 16MHz х 4PLL тактова честота 64MHz ........... 16000000/4*(9+1) = 400000 = 400KHz....

Да....сметките не излизат вярно така е. В началото си мислех че Baud Rate генератора взима такт от тактовия генератор, преди множителя, а не е така. Те хората са го написали но кой да види: "The BRG count is decremented twice per instruction cycle (TCY) on the Q2 and Q4 clocks." ](*,)
Дори и така, ако не бъркам при SSPADD = 0х27 и разрешен PLL трябва да имам честота 400KHz(64000000/(4*(39+1))), при SSPADD = 0х9F и разрешен PLL трябва да имам честота 100KHz(64000000/(4*(159+1))). Само че при четене получавам 0xFF. Спойките по платката ги презапоих и почистих. Другото странно нещо (а може и да не е странно само на мен така да ми се струва :)) е че като намалям стойността на изтеглящите резистори предния фронт на импулса не става по стръмен ами точно обратното. Това нормално ли е?


Пет Окт 25, 2013 12:02 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Авг 23, 2005 12:02 pm
Мнения: 3070
Местоположение: София
Мнение Re: Проблем с i2c шина
Е то за да няма такива обърквации, първоначално може да ползваш микрочипските библиотеки, и чак после ако нещо не ти каресва да си правиш собствени, или да пишеш директно по регистри. Мисля че имаше функция, на която задаваш в параметър честотата на I2C-то, и тя си прави останалото например. После, като тръгне по тоя начин, поне си сигурен че хардуера не е проблем.

Друго - прочети внимателно даташита на паметта. Има там едни изчаквания след писане, че да може да четеш. Има и начин за проверка кога чипа е готов. и т.н.

На мен ми трябваше едно внимателно прочитане и на двата чаршафа, и всичко си тръгна от раз, първо на 100, а после и на 400khz. Хем ми беше сефтето с I2C шина въобще. Първо подкарах DAC-а и потенциометрите, че там е само писане, а накрая и паметта, където е и писане и четене.

Ако се не лъжа - като подадеш команда за четене, паметта трябва да ти върне ACK, ако е готова за това. Не знам какво връща като прочетени данни и дали връща въобще нещо или зависва. Просто при мен тръгна от първия път, та не съм експериментирал.

Трябва да предвидиш и някакъв механизъм за "отпушване" на шината след зависване, иначе докато дебъгваш ще береш ядове и постоянно ще трябва да включваш/изключваш захранване.


Пет Окт 25, 2013 12:58 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пет Дек 07, 2007 1:21 pm
Мнения: 31
Местоположение: Varna
Мнение Re: Проблем с i2c шина
Там е работата, че аз пиша на Асемблер и не мога да ползвам готови библиотеки. А иначе след като се подаде команда за четене, паметта връща ACK Следващата стъпка е master да разреши четенето. След като последния получи данните не се генерира ACK. Това само че важи ако се чете един байт от паметта. Ако се четат повече от един след всеки байт master трябва да генерира ACK. То е описано подробно в datasheet-а на паметта


Пет Окт 25, 2013 1:41 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 10, 2005 3:25 pm
Мнения: 5677
Местоположение: София
Мнение Re: Проблем с i2c шина
Nikolay_90, гледам, че си активирал PLL-а. Скорости ли гониш или сбит код, че караш на Асемблер?


Пет Окт 25, 2013 8:11 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пет Дек 07, 2007 1:21 pm
Мнения: 31
Местоположение: Varna
Мнение Re: Проблем с i2c шина
Правя един четец за RFID карти на 125KHz. Кодът на картата се записва във външен EEPROM. Капацитетът е 1200 карти. Понеже за пръв път се занимавам с четене на манчестър код, реших че бързодействието е много важно. А днес след упорити проби да прочета EEPROM-а вярно при включен PLL и при неуспех, реших да променя референтните времена на синхронизацията с кода така че да работи с такт 16MHz и сега е ОК. А що се отнася до Асемблера, на него започнах да пиша преди близо 6 години и до ден днешен все с него си продължавам.


Пет Окт 25, 2013 9:07 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 10 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 1 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни