FSMC на 103Zet6

Пито
Пт 16 декабря 2016 г., 19:44
Я взял пример "fsmc_test.CPP "из GitHub от Leaflab и составлен для 103zet generic.
Следующий шаг - попробовать с припаянностью SRAM, все еще ожидая чипа.. // The FSMC TEST example // from libmaple-master.lib // modded/fixed for stm32duino // uses SRAM in Bank 1, Region 3, /CS at PG10 // for stm32f103zet6 board // Pito 12/2016 #include // for ptrdiff_t #include #include // -- SRAM config ------------------------------------------------------------- // Timing configuration - for a 55ns SRAM (to be tested) #define DATAST 0x4 #define ADDSET 0x1 // Number of SRAM chips wired (max 4 in BANK1) #define NSRAMCHIPS 1 // Their start addresses in FSMC BANK 1 (we do not use here) __io uint16 *const starts[NSRAMCHIPS] = { // (__io uint16 *const)FSMC_NOR_PSRAM_REGION1, // (__io uint16 *const)FSMC_NOR_PSRAM_REGION2, (__io uint16 *const)FSMC_NOR_PSRAM_REGION3, // (__io uint16 *const)FSMC_NOR_PSRAM_REGION4, }; // Corresponding FSMC configuration registers __io uint32 *const bcrs[NSRAMCHIPS] = { // &FSMC_NOR_PSRAM1_BASE->BCR, // &FSMC_NOR_PSRAM2_BASE->BCR, &FSMC_NOR_PSRAM3_BASE->BCR, // &FSMC_NOR_PSRAM4_BASE->BCR, }; // Corresponding FSMC timing registers __io uint32 *const btrs[NSRAMCHIPS] = { // &FSMC_NOR_PSRAM1_BASE->BTR, // &FSMC_NOR_PSRAM2_BASE->BTR, &FSMC_NOR_PSRAM3_BASE->BTR, // &FSMC_NOR_PSRAM4_BASE->BTR, }; // Start of FSMC SRAM BANK 1, REGION 3 static uint16 *const sram_start = (uint16*)0x68000000; // End of Maple Native SRAM chip address space (512K 16-bit words) static uint16 *const sram_end = (uint16*)0x68100000; void test_single_write(void); void test_all_addresses(void); void setup() { fsmc_sram_init_gpios(); rcc_clk_enable(RCC_FSMC); // All wired SRAM chips are of the same type for (int i = 0; i < NSRAMCHIPS; i++) { *bcrs[i] = (FSMC_BCR_WREN | FSMC_BCR_MTYP_SRAM | FSMC_BCR_MWID_16BITS | FSMC_BCR_MBKEN); *btrs[i] = (DATAST << 8) | ADDSET; } delay(10000); // wait on USB pinMode(PC13, OUTPUT); digitalWrite(PC13, LOW); Serial.begin(115200); // Serial.read(); Serial.println("*** Beginning RAM chip test"); test_single_write(); test_all_addresses(); Serial.println("Tests pass, finished."); Serial.println("***\n"); } void loop() { } void test_single_write() { uint16 *ptr = sram_start; uint16 tmp; Serial.print("Writing 0x1234... "); *ptr = 0x1234; Serial.println("Done."); Serial.print("Reading... "); tmp = *ptr; Serial.print("Done: 0x"); Serial.println(tmp, HEX); if (tmp != 0x1234) { Serial.println("Mismatch; abort."); // ASSERT(0); } } void test_all_addresses() { uint32 start, end; uint16 count = 0; uint16 *ptr; Serial.println("Now writing all memory addresses (unrolled loop)"); start = micros(); for (ptr = sram_start; ptr < sram_end;) { *ptr++ = count++; *ptr++ = count++; *ptr++ = count++; *ptr++ = count++; *ptr++ = count++; *ptr++ = count++; *ptr++ = count++; *ptr++ = count++; *ptr++ = count++; *ptr++ = count++; *ptr++ = count++; *ptr++ = count++; *ptr++ = count++; *ptr++ = count++; *ptr++ = count++; *ptr++ = count++; } end = micros(); Serial.println(count); Serial.print("Done. Elapsed time (us): "); Serial.println(end - start); // delay(10000); Serial.println("Validating writes."); for (ptr = sram_start, count = 0; ptr < sram_end; ptr++, count++) { uint16 value = *ptr; if (value != count) { Serial.print("mismatch: 0x"); Serial.print((uint32)ptr, HEX); Serial.print(" = 0x"); Serial.print(value, HEX); Serial.print(", should be 0x"); Serial.print(count, HEX); Serial.println("."); //ASSERT(0); } } Serial.println("Done; all writes seem valid."); ptrdiff_t nwrites = sram_end - sram_start; double us_per_write = double(end-start) / double(nwrites); Serial.print("Number of writes = "); Serial.print(nwrites); Serial.print("; avg. time per write = "); Serial.print(us_per_write); Serial.print(" us ("); Serial.print(1 / us_per_write); Serial.println(" MHz)"); }

michael_l
Пт 16 декабря 2016 г., 19:50
Это интересно.. Любое изменение, чтобы получить больше SRAM в STM32F103C8T6 ? У меня скоро в одном из моих проектов не хватает барана :-)

Пито
Пт 16 декабря 2016 г., 8:24 вечера
Он работает даже без чипа SRAM - он записывает данные, в последующем чтении показывает несоответствие, конечно.. *** Beginning RAM chip test Writing 0x1234... Done. Reading... Done: 0x0 Mismatch; abort. Now writing all memory addresses (unrolled loop) Done. Elapsed time (us): 27369 Validating writes. mismatch: 0x1610612738 = 0x0, should be 0x1. mismatch: 0x1610612740 = 0x0, should be 0x2. mismatch: 0x1610612742 = 0x0, should be 0x3. mismatch: 0x1610612744 = 0x0, should be 0x4. mismatch: 0x1610612746 = 0x0, should be 0x5. mismatch: 0x1610612748 = 0x0, should be 0x6. mismatch: 0x1610612750 = 0x0, should be 0x7. mismatch: 0x1610612752 = 0x0, should be 0x8. mismatch: 0x1610612754 = 0x0, should be 0x9. ..

Пито
Пт 16 декабря 2016 г., 8:48 вечера
Кажется, нет никакого fsmc_init () в приведенном выше коде..

ZMEMW16
Пт 16 декабря 2016 г., 8:52 вечера
не заставило бы его потерпеть неудачу раньше ?
SRP

Пито
Пт 16 декабря 2016 г., 21:07
Добавлены SRAM Config и FSMC_INIT в приведенный выше код. Понятия не знаю, почему Leaflab забыл, что :)
Теперь цифры гораздо более реалистичны: *** Beginning RAM chip test Writing 0x1234... Done. Reading... Done: 0xFFFF Mismatch; abort. Now writing all memory addresses (unrolled loop) 524288 Done. Elapsed time (us): 2140840 Validating writes. mismatch: 0x1610612736 = 0xFFFF, should be 0x0. mismatch: 0x1610612738 = 0xFFFF, should be 0x1. mismatch: 0x1610612740 = 0xFFFF, should be 0x2. mismatch: 0x1610612742 = 0xFFFF, should be 0x3. mismatch: 0x1610612744 = 0xFFFF, should be 0x4. mismatch: 0x1610612746 = 0xFFFF, should be 0x5.

Ахулл
Пт 16 декабря 2016 г., 21:22
michael_l написал:Это интересно.. Любое изменение, чтобы получить больше SRAM в STM32F103C8T6 ? У меня скоро в одном из моих проектов не хватает барана :-)

Пито
Пт 16 декабря 2016 г., 21:33
ОК, исправил шестнадцатеричную печать: mismatch: 0x60000000 = 0xFEDF, should be 0x0. mismatch: 0x60000002 = 0xFE5F, should be 0x1. mismatch: 0x60000004 = 0xFE5F, should be 0x2. mismatch: 0x60000006 = 0xFE5F, should be 0x3.

Пито
Сб 17 декабря 2016 г., 11:02
Два параметра #define DATAST 0x4 #define ADDSET 0x1

ZMEMW16
Сб 17 декабря 2016 г., 11:29
Так получилось, что мои покупки Waveshare были на высоком уровне, Open103R/V/Z и обычно C -пакеты
Возможно, даже 407/429i также также.
Купите самое высокое / лучшее, что вы можете себе позволить в изгибе в участке затрат / иди с более быстрыми полосами, даже если вы не можете сразу его использовать.
Правило экспортируется при покупке аппаратного обеспечения для использования под Linux, оно в конечном итоге попадет туда ... ...
Я полагаю, я должен упомянуть возвраты PPI, которые я получил, почему бы не спросить, вы никогда не знаете.
не совсем лото, но все же довольно милый. все прошло, но кусочки для хороших лет игрового времени.

Итак, с чего бы я начал с плагинов NAND или NO ?
У меня был только быстрый взгляд, но все, что я нашел, это файл настройки контактов GPIO.

Стивен

Пито
Солнце 18 декабря 2016 г. 9:36 утра
Все еще жду 55NS SRAM. Поэтому я попробовал с 10NS One (планируется использовать с платой 407) :)
*** Beginning RAM chip test Writing 0x1234... Done. Reading... Done: 0x1234 Now writing all memory addresses (unrolled loop) 524288 Done. Elapsed time (us): 67501 Validating writes. Done; all writes seem valid. Number of writes = 524288; avg. time per write = 0.13 us (7.77 MHz) Tests pass, finished. ***