|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 1:30 am
| Автор |
Съобщение |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
 23LC1024
Някой пускал ли е SPI SRAM памет 23LC1024 , 128kb x 8-bit ?
Това чудо не мога да го подкарам от 2 дни, пробвам от 100kHz до 10MHz, четене в средата на clock-а, четене в края, запис по растящ/падащ фронт, накрая се усъмних в SPI модула на процесора ( то какво да му има, 3 регистъра на кръст, на скопа го гледам каквото му кажа това прави ) и направих софтуерен SPI , същата работа. Процесора е dsPIC30F5015, на 10 MIPS работи, но определено проблема не е в него. Пробвам на повече от една платка, разлика няма.
Маркировката на чипа е също съмнителна, би трябвало да е 23LC1024, а маркиран като 23LCBI, закупуван е от Mouser. Гледах примерни програми за 23K256, който е с по-малко памет и има един бит в mode регистъра, с който бит може да се бъзика HOLD сигнала, нищо по-различно не правя.
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Сря Ное 21, 2012 7:49 pm |
|
 |
|
RM
Ранг: Почетен член
Регистриран на: Нед Окт 19, 2008 7:26 pm Мнения: 673
|
 Re: 23LC1024
http://www.ccsinfo.com/forum/viewtopic.php?t=48991&view=nextНе съм работил с подобни ни, но търсех нещо друго и попаднах на това, преди няколко дни.
_________________ Вниманиене съмвишист....ИЙ.
|
| Сря Ное 21, 2012 8:03 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
 Re: 23LC1024
Пуснах я, хардуерно/софтуерно, byte/page/sequential режим Оказва се, че има някакъв проблем в компилатора ( 3.24 ). Ако примерно функцията за четене е с 16-битов адрес: и вътре в нея като най-старши байт в 24-битовия адрес на паметта просто изпращам 0, работи. Ако обаче е така: компилатора прави едни грозни присвоявания, които нямат нищо общо с истината, при което чете и пише някъде на гьотери из SPI паметта. Като имам време ще се позанимая с асемблерския листинг да видя какъв е точно проблема. Получи се добре, мога да закача SPI SRAM памет към кой да е PIC24/dsPIC3x и примерно чрез да накарам GCC-то да разглежда ExternalArray[] като външна памет, и същевременно да може да се ползва в сорс кода като нормална C променлива, примерно:
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Сря Ное 21, 2012 10:41 pm |
|
 |
|
nik
Ранг: Форумен бог
Регистриран на: Сря Мар 22, 2006 3:25 am Мнения: 6418
|
 Re: 23LC1024
отдавна беше и не помня версията на CCS но си спомням че имах няколко пъти подобни проблеми с компилирането, първо се рових из асемблера докато разбера че прави глупости, а след това просто пренаписвам кода който не работи по друг начин и изведнъж заработва, най често ми е правил проблема кoгато трябва да работи с различни по размер или тип променливи
|
| Чет Ное 22, 2012 12:23 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
 Re: 23LC1024
Тук става въпрос за GCC 4.0.3 ( MPLAB C v3.24 ), а не за CCS. В първия вариант, когато адреса е 0 се генерира неправилен код, нулира се само W0, а трябва да се нулират W1:W0, данните се подават в W1, а трябва да са в W2 Wъв втория вариант, когато адреса е зададен като 0L, се генерира правилен код. Адреса се подава правилно в W1:W0, а данните в W2. Мисля, че няма значение дали са включени оптимизациите или не са. Не съм сигурен дали е бъг в компилатора, или изисква когато като параметри на функции се подават 32-битови константи да са задължително със суфикса 'L' . Ако като 32-битов параметър на функция се подаде 32-битова променлива тогава няма проблем. Иначе паметта си работи, пробвах я до 10MHz. На 20MHz не съм я пробвал, тъй като трябва да сменям коефициентите на PLL-а на професора.
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Чет Ное 22, 2012 8:19 pm |
|
 |
|
woody
Ранг: Форумен бог
Регистриран на: Вто Юли 31, 2007 2:55 pm Мнения: 1792 Местоположение: София
|
 Re: 23LC1024
"int" типът 16 бита ли е?
|
| Чет Ное 22, 2012 8:45 pm |
|
 |
|
ps66
Ранг: Форумен бог
Регистриран на: Пет Яну 19, 2007 9:16 am Мнения: 1063 Местоположение: путинофили: "иди н***й"
|
 Re: 23LC1024
как е дефинирана WriteByte_23LC1024 ?
|
| Пет Ное 23, 2012 1:22 am |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
 Re: 23LC1024
Това са размерите на данните и декларациите на функциите:  |  |  |  | Код: #if defined __C30__ // PIC24F, PIC24H, dsPIC30, dsPIC33, dsPIC33E typedef enum _bool { false = 0, true } bool; typedef char int8; typedef unsigned char uint8; typedef signed short int int16; typedef unsigned short int uint16; typedef signed long int32; typedef unsigned long uint32; typedef signed long long int64; typedef unsigned long long uint64; typedef float float32; typedef long double double64; #endif
uint8 ReadByte_23LC1024(uint32 address); void ReadSeq_23LC1024(uint32 address, uint8 *data, uint16 length); void WriteByte_23LC1024(uint32 address, uint8 data); void WriteSeq_23LC1024(uint32 address, uint8 *data, uint16 length);
|  |  |  |  |
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Пет Ное 23, 2012 5:28 am |
|
 |
|
woody
Ранг: Форумен бог
Регистриран на: Вто Юли 31, 2007 2:55 pm Мнения: 1792 Местоположение: София
|
 Re: 23LC1024
Прилича като да няма прототип и затова да се предава "int". Виж дали не се е случило нещо такова по погрешка, ако трябва преди първото ползване на функцията набий на ръка прототип.
|
| Пет Ное 23, 2012 1:22 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
 Re: 23LC1024
Не е това, има си коректни прототипи на всички функции. Генерираният код е грешен където и да извикам функциите ReadByte_xxx() и WriteByte_xxx() с 32-битова константа по-малка от 0x00010000 и без суфикс 'L'. Практически компилатора "забравя" и въобще не зарежда байта за запис в W2, ами се предава случайна стойност. Ето примерно(само последното извикване е коректно, адрес = 0x10000000 ):  |  |  |  | Код: Init_23LC1024(); 00447C 07FD68 RCALL Init_23LC1024 281: 282: 283: WriteByte_23LC1024( 0/*W1:W0*/, 0x01/*W2*/ ); 00447E 200011 MOV #0x1, W1 004480 EB0000 CLR W0 004482 07FDD8 RCALL WriteByte_23LC1024 284: WriteByte_23LC1024( 0x00000000/*W1:W0*/, 0x01/*W2*/ ); 004484 200011 MOV #0x1, W1 004486 EB0000 CLR W0 004488 07FDD5 RCALL WriteByte_23LC1024 285: WriteByte_23LC1024( 0x0000E00E/*W1:W0*/, 0x01/*W2*/ ); 00448A 200011 MOV #0x1, W1 00448C 2E00E0 MOV #0xE00E, W0 00448E 07FDD2 RCALL WriteByte_23LC1024 286: WriteByte_23LC1024( 0x0000F00F/*W1:W0*/, 0x01/*W2*/ ); 004490 200011 MOV #0x1, W1 004492 2F00F0 MOV #0xF00F, W0 004494 07FDCF RCALL WriteByte_23LC1024 287: WriteByte_23LC1024( 0x0000FFFF/*W1:W0*/, 0x01/*W2*/ ); 004496 200011 MOV #0x1, W1 004498 EB8000 SETM W0 00449A 07FDCC RCALL WriteByte_23LC1024 288: WriteByte_23LC1024( 0x10000000/*W1:W0*/, 0x01/*W2*/ ); 00449C 200012 MOV #0x1, W2 00449E 200000 MOV #0x0, W0 0044A0 210001 MOV #0x1000, W1 0044A2 07FDC8 RCALL WriteByte_23LC1024
|  |  |  |  |
Както и да е, явно си е бъг в Microchip версията на GCC. За почти 2г. употреба това е първият бъг който забелязвам. Ще видя дали и в последните им версии не е засррано положението.
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Пет Ное 23, 2012 1:41 pm |
|
 |
|
woody
Ранг: Форумен бог
Регистриран на: Вто Юли 31, 2007 2:55 pm Мнения: 1792 Местоположение: София
|
 Re: 23LC1024
Прилича на бъг, защото няма как да има две конвенции за параметрите като в случая. Първите пет са еднакви, защото по подразбиране промоцията е до "int".
|
| Пет Ное 23, 2012 2:00 pm |
|
 |
|
bkulev
Ранг: Популярен
Регистриран на: Сря Яну 25, 2006 12:47 pm Мнения: 305 Местоположение: Varna
|
 Re: 23LC1024
прев, мисля че това е вярно: "подават 32-битови константи да са задължително със суфикса 'L'" имал съм същия проблем с GCC компилатора. И си мисля, че проблемът не е при използването на констаната, а при заделянето на памет за нея.
|
| Пет Ное 23, 2012 7:59 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
 Re: 23LC1024
Погледни листинга, при две различни извиквания се подават по два различни начин параметрите към функцията, а функцията може да приеме само по един-единствен начин последователността от входни параметри. Бих се съгласил с теб, ако се сгомнясваше само подаването на 32-битовия параметър, а то се сгомнясват всички параметри, като последния дори не се подава. При заделянето на памет би трябвало да се води от размера на дефинираната променлива в прототипа, а не от това което аз подавам като число. Ако подавам число, което може да се представи с 16-бита, то трябва просто да нулира старшите 16-бита и пак да подаде на функцията 32-те бита, щото функцията няма как да разбере дали й подават 16 или 32-бита. Проверих и версия MPLAB C 3.30c, и там е същото. За XC16 не намерих лиценз за активация, но предполагам, че и там е така. Не съм погледнал във форума им дали вече не е отворена подобна тема.
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Съб Ное 24, 2012 12:29 am |
|
 |
|
Zdrav
Ранг: Форумен бог
Регистриран на: Сря Яну 26, 2005 2:01 pm Мнения: 1952 Местоположение: Варна
|
 Re: 23LC1024
Интересен бъг. Пробвах да го възпроизведа при мен. Компилатора е: Извиквам го така: В сорса имам: В асемблерския листинг: Всичко изглежда наред.
_________________ Най-опасният враг на истината и свободата е мнозинството.
|
| Съб Ное 24, 2012 11:15 am |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
 Re: 23LC1024
Zdrav, пробвай да сложиш функцията в отделен файл, а да я викаш от втори. Въпреки, че има заглавен файл с правилен прототип в този случай се издънва. Ако е както ти си изпробвал функцията да е в същия файл тогава работи коректно. При мен е следната конфигурация:
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Съб Ное 24, 2012 6:32 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 1 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|