sonycman 0 11 августа, 2011 Опубликовано 11 августа, 2011 · Жалоба Что сбрасываются - это ничего, все-таки поллинг не есть гуд. А вот то, что поведение некоторых битов сего регистра из документации совсем не очевидно - это действительно плохо. А например? Какие подозрительно себя ведут? Посмотрел осциллографом на MCCK - он идёт на карту постоянно, то есть не гейтится вообще, активируется сразу после включения MCI. Хм, смысл тогда выдавать команду с 74 тактами? Достаточно просто подождать немножко :( Попробовать включить Power Save Mode? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 11 августа, 2011 Опубликовано 11 августа, 2011 · Жалоба А например? Какие подозрительно себя ведут? Ну, например, очень интересно было бы узнать расположение событий BLKE, DTIP и DCRCE во времени. Тот же DTOE тоже интересен. Да что тут говорить, если большинство битов регистра SR упоминаются лишь в паре строчек его описания? Посмотрел осциллографом на MCCK - он идёт на карту постоянно, то есть не гейтится вообще, активируется сразу после включения MCI. Хм, смысл тогда выдавать команду с 74 тактами? Достаточно просто подождать немножко :( Можно и подождать, но выдать команду просто удобнее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 21 августа, 2011 Опубликовано 21 августа, 2011 · Жалоба Что-то не пойму, почему у меня виснет контроллер после приблизительно недели работы батарейного блока от батареи. Ситуация такая - имеется плата от стартеркита SK-MATSAM3U4, к ней я подпаял батарею CR2032 через стандартную схему с двумя диодами, запитав таким образом блок RTC от батареи при отключении питания (перемычку J7 снял). Устанавливаю правильное время в регистр времени (регистр даты не трогаю) и отключаю питание. Хочу таким образом увидеть, насколько велика будет погрешность часов с течением времени. В таком виде плата работает около недели нормально - время от времени подаю питание и смотрю, сколько натикало в RTC. Включаю на след. день - контроллер не реагирует вообще ни на что! Программа не выполняется, даже J-Link подключится не может, сыпет ошибками. При этом потребление тока контроллером идёт на полную - около 70 ма. Напряжение на батарее при этом 3050 мв. Всё начинает нормально функционировать только после сброса по RSTB, то есть флеш не слетает, а происходит какое-то залочивание контроллера при включении... Плата лежит дома, при комнатной температуре... Непонятно это всё, это что-же, мне теперь каждую неделю батарейку передёргивать и переустанавливать часы? Мог ли я что-то напортачить в коде стартапа? Но эта проблема возникает только после простоя платы без питания несколько дней... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
singlskv 0 25 августа, 2011 Опубликовано 25 августа, 2011 · Жалоба Проверил на SAM7: таки да, не доходит до RC, что совсем не вяжется ни с описанием, ни с картинками :( Такое ощущение, что таймер сбрасывается по сравнению асинхронно (что можно было бы предположить, глядя на картинку), однако точно известно, что SWTRG таймер без клока не сбрасывает, а на картинке эти источники объединены. Ну и в тексте явно написано, что для любого источника сброс срабатывает на следующем клоке. UPD: Поэкспериментировал еще с внешним клоком. В режиме WAVESEL_UP_AUTO сброс таймера происходит моментально по достижении им значения RC, т.е. первой ассемблерной командой даю последний фронт при CV = RC - 1, следующей считываю CV уже равным 0. Зато при установке дополнительно бита CPCSTOP таймер останавливается со значением CV = RC. SWTRIG честно срабатывает только на следующем фронте. То есть врут мануалы уже десять лет. я года 4 сидел с "неправильным" тактом из-за этой "особенности", правда в моем случае ошибка была практически ничтожна 1/24000, но все же я ее случайно поймал и после пятого прочтения даташита я нашел нужные слова: When WAVSEL = 10, the value of TC_CV is incremented from 0 to the value of RC, then automatically reset on a RC Compare. автоматически это видимо именно значит в тот же момент не зависимо от прескейлера и выяснилось это все при программировании PWM контроллера когда у меня банально не совпали частоты... ну и да, я включился в ряды SAM3водил, так что по мере освоения могу тоже давать ответы и задавать вопросы, и если топикстартер не против(?) то буду делать это в этой теме... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 26 августа, 2011 Опубликовано 26 августа, 2011 · Жалоба ну и да, я включился в ряды SAM3водил, так что по мере освоения могу тоже давать ответы и задавать вопросы, и если топикстартер не против(?) то буду делать это в этой теме... Добро пожаловать! Конечно, я не против :) Только вот запропастился куда-то наш гуру, в отпуске, наверное :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BurglarInt 0 30 августа, 2011 Опубликовано 30 августа, 2011 · Жалоба Здравствуйте, у меня появилась проблема при работе с внешней NAND Flash. При подаче команды Read ID к Flash, сигнал CE формируется неправильно (не становится в актиный уровень). Вследствии этого флэш не реагирует на команду, в чем может быть проблема ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 31 августа, 2011 Опубликовано 31 августа, 2011 · Жалоба Всё начинает нормально функционировать только после сброса по RSTB, то есть флеш не слетает, а происходит какое-то залочивание контроллера при включении... Плата лежит дома, при комнатной температуре... Непонятно это всё, это что-же, мне теперь каждую неделю батарейку передёргивать и переустанавливать часы? Мог ли я что-то напортачить в коде стартапа? Но эта проблема возникает только после простоя платы без питания несколько дней... Наблюдал точно такое же поведение "родного" кита от атмела. От батарейки в своем устройстве в результате был вынужден отказаться. Кстати, на вашей плате стоит -ES, или более свежий кристалл? Только вот запропастился куда-то наш гуру, в отпуске, наверное :rolleyes: Вроде того. Здравствуйте, у меня появилась проблема при работе с внешней NAND Flash. При подаче команды Read ID к Flash, сигнал CE формируется неправильно (не становится в актиный уровень). Вследствии этого флэш не реагирует на команду, в чем может быть проблема ? В ревизии -ES один из CE не работает - не ваш ли случай? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 31 августа, 2011 Опубликовано 31 августа, 2011 · Жалоба Наблюдал точно такое же поведение "родного" кита от атмела. От батарейки в своем устройстве в результате был вынужден отказаться. Кстати, на вашей плате стоит -ES, или более свежий кристалл? У меня ревизия А. Возможно, залочивание кристалла происходит по причине слишком медленного нарастания напряжения питания. Проблема возникает при запитывании от лабораторного источника с ограничением макс. тока на уровне 250 ма (пробовал и 750 - всё одно). Последние 10 дней запитываю от USB порта компьютера - пока ни разу не повис. Потом попробую установить ограничение тока лабораторника на несколько ампер, для эксперимента. ЗЫ: вот уже несколько лет пользуюсь лабораторником - проблем с нарастанием напряжения и зависанием не было никогда. SAM3U первый проблемный кристалл. И проблема возникает только при питании батарейного блока от батареи. Наверное, тоже придётся отказаться от встроенного RTC :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 31 августа, 2011 Опубликовано 31 августа, 2011 · Жалоба Охладить попробуйте - кит у меня зависал после улицы зимой (хотя сам при этом сильно остыть не успевал). Вообще же, ситуация дурацкая - причины неясны, в еррате молчок, а зависание наблюдается. И в качестве дополнительного бонуса очень медленный старт процессора после RSTB :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
singlskv 0 12 сентября, 2011 Опубликовано 12 сентября, 2011 · Жалоба то буду делать это в этой теме...Ну вот и вопросики нарисовались: 1. Ремап векторов в SRAM улучшает производительность(учитываем различные шины для доступа к FLASH и SRAM) ? 2. Размещение функции которая должна максимально быстро работать в SRAM дает преимущество как на ARM7 или нет ? (ARM вроде как утверждает что из-за наличия многих шин код не нужно размещать в SRAM) 3. Какие ограничения имеет PDC по пропускной способности ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 12 сентября, 2011 Опубликовано 12 сентября, 2011 · Жалоба 1-2. Нет. 3. Каких-либо прямых ограничений не имеет. Да и подключен он теперь исключительно к медленной периферии. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
singlskv 0 12 сентября, 2011 Опубликовано 12 сентября, 2011 · Жалоба 1-2. Нет.А что делать с функциями записи в флеш ? у меня что-то какая-то фигня беру свою стандартную(от арм7) функцию которая работает в секции .fast и считает просто CRC16 вылетаю в hardfault соответственно вопрос про запись в флеш запускать из SRAM(а как ?) или юзать IAP из SAM-BA ? хотя конечно возможно у CrossWorks странный конфиг по умолчанию.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 12 сентября, 2011 Опубликовано 12 сентября, 2011 · Жалоба А что делать с функциями записи в флеш ? Как и раньше - писать из RAM или другого банка. хотя конечно возможно у CrossWorks странный конфиг по умолчанию.... Посмотрите map. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
singlskv 0 12 сентября, 2011 Опубликовано 12 сентября, 2011 · Жалоба Как и раньше - писать из RAM или другого банка Посмотрите map. то есть у Вас из рам все работает ? при записи в флеш тогда буду копать скрипт линкера... просто у меня какая-то фигня генерица компилятором похоже... не вижу чего-нить непрвильного в map файле Hardfault генерит вызов функции WORD ModbusCrcBuff(BYTE *buff, DWORD len); вот их описание: //---- CRC sections #define FAST_SECTION __attribute__((section(".fast"))) #define FLASH_CONST_ARRAY static const #define RAM_ARRAY #define MODBUS_CRC_SECTION FAST_SECTION #define CRC8_SECTION FAST_SECTION #define MODBUS_CRC_TABLE RAM_ARRAY #define CRC8_TABLE RAM_ARRAY ......................... #if !defined(MODBUS_CRC_SECTION) #define MODBUS_CRC_SECTION #endif #if !defined(CRC8_SECTION) #define CRC8_SECTION #endif #if !defined(FLASH_CONST_ARRAY) #define FLASH_CONST_ARRAY static const #endif #if !defined(MODBUS_CRC_TABLE) #define MODBUS_CRC_TABLE FLASH_CONST_ARRAY #endif #if !defined(CRC8_TABLE) #define CRC8_TABLE FLASH_CONST_ARRAY #endif #include "ModbusCrc.h" MODBUS_CRC_TABLE BYTE ModbusCrcLo[256] = { 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40 }; MODBUS_CRC_TABLE BYTE ModbusCrcHi[256]= { 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80, 0x40 }; WORD ModbusCrc(WORD crc, BYTE data) MODBUS_CRC_SECTION; WORD ModbusCrc(WORD crc, BYTE data) { BYTE crclo = crc; BYTE crchi = crc >> 8; BYTE index = crclo ^ data; crclo = crchi ^ ModbusCrcLo[index]; crchi = ModbusCrcHi[index]; return (crchi << 8) | crclo; } WORD ModbusCrcBuff(BYTE *buff, DWORD len) MODBUS_CRC_SECTION; WORD ModbusCrcBuff(BYTE *buff, DWORD len) { BYTE index; BYTE crclo = MODBUS_CRC_LO_DEFAULT; BYTE crchi = MODBUS_CRC_HI_DEFAULT; while (len--) { index = crclo ^ *buff++; crclo = crchi ^ ModbusCrcLo[index]; crchi = ModbusCrcHi[index]; } return (crchi << 8) | crclo; } CRC8_TABLE BYTE DallasCrc[256] = { // Полином 0x8C 0, 94,188,226, 97, 63,221,131,194,156,126, 32,163,253, 31, 65, 157,195, 33,127,252,162, 64, 30, 95, 1,227,189, 62, 96,130,220, 35,125,159,193, 66, 28,254,160,225,191, 93, 3,128,222, 60, 98, 190,224, 2, 92,223,129, 99, 61,124, 34,192,158, 29, 67,161,255, 70, 24,250,164, 39,121,155,197,132,218, 56,102,229,187, 89, 7, 219,133,103, 57,186,228, 6, 88, 25, 71,165,251,120, 38,196,154, 101, 59,217,135, 4, 90,184,230,167,249, 27, 69,198,152,122, 36, 248,166, 68, 26,153,199, 37,123, 58,100,134,216, 91, 5,231,185, 140,210, 48,110,237,179, 81, 15, 78, 16,242,172, 47,113,147,205, 17, 79,173,243,112, 46,204,146,211,141,111, 49,178,236, 14, 80, 175,241, 19, 77,206,144,114, 44,109, 51,209,143, 12, 82,176,238, 50,108,142,208, 83, 13,239,177,240,174, 76, 18,145,207, 45,115, 202,148,118, 40,171,245, 23, 73, 8, 86,180,234,105, 55,213,139, 87, 9,235,181, 54,104,138,212,149,203, 41,119,244,170, 72, 22, 233,183, 85, 11,136,214, 52,106, 43,117,151,201, 74, 20,246,168, 116, 42,200,150, 21, 75,169,247,182,232, 10, 84,215,137,107, 53 }; BYTE Crc8Buff(BYTE *buff, DWORD len) CRC8_SECTION; BYTE Crc8Buff(BYTE *buff, DWORD len) { BYTE index; BYTE crc = CRC8_DEFAULT; while (len--) { index = crc ^ *buff++; crc = DallasCrc[index]; } return crc; } LoaderSdi16.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 12 сентября, 2011 Опубликовано 12 сентября, 2011 · Жалоба то есть у Вас из рам все работает ? при записи в флеш Не пробовал, но нет оснований не доверять документации в данном вопросе. тогда буду копать скрипт линкера... просто у меня какая-то фигня генерица компилятором похоже... Вообще, я бы IAP-функцию использовал, наверное - меньше телодвижений и расхода RAM нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться