Перейти к содержанию
    

Что сбрасываются - это ничего, все-таки поллинг не есть гуд. А вот то, что поведение некоторых битов сего регистра из документации совсем не очевидно - это действительно плохо.

А например? Какие подозрительно себя ведут?

 

Посмотрел осциллографом на MCCK - он идёт на карту постоянно, то есть не гейтится вообще, активируется сразу после включения MCI.

Хм, смысл тогда выдавать команду с 74 тактами? Достаточно просто подождать немножко :(

 

Попробовать включить Power Save Mode?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А например? Какие подозрительно себя ведут?

Ну, например, очень интересно было бы узнать расположение событий BLKE, DTIP и DCRCE во времени. Тот же DTOE тоже интересен.

Да что тут говорить, если большинство битов регистра SR упоминаются лишь в паре строчек его описания?

 

Посмотрел осциллографом на MCCK - он идёт на карту постоянно, то есть не гейтится вообще, активируется сразу после включения MCI.

Хм, смысл тогда выдавать команду с 74 тактами? Достаточно просто подождать немножко :(

Можно и подождать, но выдать команду просто удобнее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что-то не пойму, почему у меня виснет контроллер после приблизительно недели работы батарейного блока от батареи.

 

Ситуация такая - имеется плата от стартеркита SK-MATSAM3U4, к ней я подпаял батарею CR2032 через стандартную схему с двумя диодами, запитав таким образом блок RTC от батареи при отключении питания (перемычку J7 снял).

 

Устанавливаю правильное время в регистр времени (регистр даты не трогаю) и отключаю питание.

Хочу таким образом увидеть, насколько велика будет погрешность часов с течением времени.

 

В таком виде плата работает около недели нормально - время от времени подаю питание и смотрю, сколько натикало в RTC.

 

Включаю на след. день - контроллер не реагирует вообще ни на что! Программа не выполняется, даже J-Link подключится не может, сыпет ошибками.

При этом потребление тока контроллером идёт на полную - около 70 ма.

Напряжение на батарее при этом 3050 мв.

 

Всё начинает нормально функционировать только после сброса по RSTB, то есть флеш не слетает, а происходит какое-то залочивание контроллера при включении...

Плата лежит дома, при комнатной температуре...

 

Непонятно это всё, это что-же, мне теперь каждую неделю батарейку передёргивать и переустанавливать часы?

Мог ли я что-то напортачить в коде стартапа? Но эта проблема возникает только после простоя платы без питания несколько дней...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проверил на 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водил,

так что по мере освоения могу тоже давать ответы и задавать вопросы,

и если топикстартер не против(?) то буду делать это в этой теме...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну и да, я включился в ряды SAM3водил,

так что по мере освоения могу тоже давать ответы и задавать вопросы,

и если топикстартер не против(?) то буду делать это в этой теме...

Добро пожаловать!

Конечно, я не против :)

Только вот запропастился куда-то наш гуру, в отпуске, наверное :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте, у меня появилась проблема при работе с внешней NAND Flash.

При подаче команды Read ID к Flash, сигнал CE формируется неправильно (не становится в актиный уровень). Вследствии этого флэш не реагирует на команду, в чем может быть проблема ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всё начинает нормально функционировать только после сброса по RSTB, то есть флеш не слетает, а происходит какое-то залочивание контроллера при включении...

Плата лежит дома, при комнатной температуре...

 

Непонятно это всё, это что-же, мне теперь каждую неделю батарейку передёргивать и переустанавливать часы?

Мог ли я что-то напортачить в коде стартапа? Но эта проблема возникает только после простоя платы без питания несколько дней...

Наблюдал точно такое же поведение "родного" кита от атмела. От батарейки в своем устройстве в результате был вынужден отказаться.

Кстати, на вашей плате стоит -ES, или более свежий кристалл?

 

Только вот запропастился куда-то наш гуру, в отпуске, наверное :rolleyes:

Вроде того.

 

Здравствуйте, у меня появилась проблема при работе с внешней NAND Flash.

При подаче команды Read ID к Flash, сигнал CE формируется неправильно (не становится в актиный уровень). Вследствии этого флэш не реагирует на команду, в чем может быть проблема ?

В ревизии -ES один из CE не работает - не ваш ли случай?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Наблюдал точно такое же поведение "родного" кита от атмела. От батарейки в своем устройстве в результате был вынужден отказаться.

Кстати, на вашей плате стоит -ES, или более свежий кристалл?

У меня ревизия А.

 

Возможно, залочивание кристалла происходит по причине слишком медленного нарастания напряжения питания.

Проблема возникает при запитывании от лабораторного источника с ограничением макс. тока на уровне 250 ма (пробовал и 750 - всё одно).

Последние 10 дней запитываю от USB порта компьютера - пока ни разу не повис.

 

Потом попробую установить ограничение тока лабораторника на несколько ампер, для эксперимента.

 

ЗЫ: вот уже несколько лет пользуюсь лабораторником - проблем с нарастанием напряжения и зависанием не было никогда.

SAM3U первый проблемный кристалл. И проблема возникает только при питании батарейного блока от батареи.

 

Наверное, тоже придётся отказаться от встроенного RTC :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Охладить попробуйте - кит у меня зависал после улицы зимой (хотя сам при этом сильно остыть не успевал).

 

Вообще же, ситуация дурацкая - причины неясны, в еррате молчок, а зависание наблюдается. И в качестве дополнительного бонуса очень медленный старт процессора после RSTB :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

то буду делать это в этой теме...
Ну вот и вопросики нарисовались:

1. Ремап векторов в SRAM улучшает производительность(учитываем различные шины для доступа к FLASH и SRAM) ?

2. Размещение функции которая должна максимально быстро работать в SRAM дает преимущество как на ARM7 или нет ?

(ARM вроде как утверждает что из-за наличия многих шин код не нужно размещать в SRAM)

3. Какие ограничения имеет PDC по пропускной способности ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1-2. Нет.

3. Каких-либо прямых ограничений не имеет. Да и подключен он теперь исключительно к медленной периферии.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1-2. Нет.
А что делать с функциями записи в флеш ?

у меня что-то какая-то фигня

беру свою стандартную(от арм7) функцию которая работает в секции .fast и считает просто CRC16

вылетаю в hardfault

соответственно вопрос про запись в флеш

запускать из SRAM(а как ?)

или юзать IAP из SAM-BA ?

 

хотя конечно возможно у CrossWorks странный конфиг по умолчанию....

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что делать с функциями записи в флеш ?

Как и раньше - писать из RAM или другого банка.

 

хотя конечно возможно у CrossWorks странный конфиг по умолчанию....

Посмотрите map.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как и раньше - писать из 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

то есть у Вас из рам все работает ? при записи в флеш

Не пробовал, но нет оснований не доверять документации в данном вопросе.

 

тогда буду копать скрипт линкера...

просто у меня какая-то фигня генерица компилятором похоже...

Вообще, я бы IAP-функцию использовал, наверное - меньше телодвижений и расхода RAM нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...