реклама на сайте
подробности

 
 
43 страниц V  « < 14 15 16 17 18 > »   
Reply to this topicStart new topic
> NIOS для начинающих
vadimuzzz
сообщение Apr 19 2011, 08:15
Сообщение #226


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(juvf @ Apr 19 2011, 15:13) *
как то не понятно, как эту флеш писать читать?

считали блок->изменили часть данных->записали блок
Go to the top of the page
 
+Quote Post
Stewart Little
сообщение Apr 19 2011, 11:12
Сообщение #227


Лентяй
******

Группа: Свой
Сообщений: 2 203
Регистрация: 11-10-04
Из: Санкт-Петербург
Пользователь №: 843



Цитата(juvf @ Apr 19 2011, 12:13) *
как то не понятно, как эту флеш писать читать?

Вы сперва разберитесь, как вообще Flash работает. Чтение из флэши возможно и побайтное, и пословное. А вот стирание и запись - посекторные. См. предыдущий ответ ув. vadimuzzz


--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
Go to the top of the page
 
+Quote Post
juvf
сообщение Apr 20 2011, 02:28
Сообщение #228


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Цитата(Stewart Little @ Apr 19 2011, 17:12) *
Вы сперва разберитесь, как вообще Flash работает. Чтение из флэши возможно и побайтное, и пословное. А вот стирание и запись - посекторные. См. предыдущий ответ ув. vadimuzzz

Ну это от флеша к флешу. Есть флешки с побайтной записью. Ну и "считали блок->изменили часть данных->записали блок" это какой-то низкоуровневый алгоритм. Я и хочу с этим разобраться. В доках от альтеры написанно, что alt_write_flash() сотрет весь блок. Нужно заботится о том, чтоб не потерять данные. Также альтера предлагает alt_write_flash_block(), якобы в этой функции не надо об этом заботится. Да и вообще, коль есть апи, можно было и более высокоуровневую функцию сделать, типа write(адрессФлэш, указательИсточника, длинна). Причем если данные 1 байт, или данные перекрывают 3 блока (например 1/3 блока 8кб, 1 блок 8 кб и 100 байт из блока в 64 кб), то эта write должна сама сделать все низкоуровневые операции типа "считали блок->изменили часть данных->записали блок". Удевительно что в hal нет такой функции. придёться самому писать ((.

Потом, тут есть регион и есть блок. Что такое регион я так и не понял. Что такое блок - понятно. Вся флеш разбита на блоки (по пдф), причем размер блоков разный. А вот что такое регион - ???
смотрю Alt_flash_types.h, структура
Код
typedef struct flash_region
{
  int   offset;
  int   region_size;
  int   number_of_blocks;
  int   block_size;
}flash_region;


int region_size - размер региона. Что такое регион?

Пока не понятно как работать с alt_flash_cfi_write? Есть у когонибудь демо проект с флешкой cfi? Поделитесь, заранее благодарен.
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Apr 20 2011, 03:30
Сообщение #229


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(juvf @ Apr 20 2011, 09:28) *
Ну и "считали блок->изменили часть данных->записали блок" это какой-то низкоуровневый алгоритм.

для флешек с блочным стиранием это обычное дело. 3-4 вызова функций HAL, что тут низкоуровневого? вот дергать alt_flash_cfi_write - это и есть низкоуровневый доступ. а так можно и с SPI-ными флешками работать
Цитата
Потом, тут есть регион и есть блок. Что такое регион я так и не понял. Что такое блок - понятно. Вся флеш разбита на блоки (по пдф), причем размер блоков разный. А вот что такое регион - ???

смотрите даташит на свою флешку, там все расписано. например, у меня интеловская p30. имеет 2 региона с разными размерами блоков в первом 32кбайтные, во втором (основном) - 128 кбайтные.
пример кода:
CODE

#include <stdio.h>
#include "alt_types.h"
#include "system.h"
#include <io.h>
#include <sys/alt_flash.h>
#include <unistd.h>
int main()
{
flash_region* regions;
alt_flash_fd* fd;
int number_of_regions;
int ret_code;
int i;
printf("Hello from Nios II!\n");
fd = alt_flash_open_dev(CFI_FLASH_0_NAME);
if (fd)
{
ret_code = alt_get_flash_info(fd, &regions, &number_of_regions);
for (i=0;i<number_of_regions;i++)
{
printf("Offset: %d\r\n", regions[i].offset);
printf("Region Size: %d\r\n", regions[i].region_size);
printf("Number of Blocks: %d\r\n", regions[i].number_of_blocks);
printf("Block Size: %d\r\n\r\n", regions[i].block_size);
}
}
}

выхлоп:
Цитата
Hello from Nios II!
Offset: 0
Region Size: 131072
Number of Blocks: 4
Block Size: 32768

Offset: 131072
Region Size: 16646144
Number of Blocks: 127
Block Size: 131072

ну, и пример 6-11 посмотрите, как запись организована. имейте в виду, что там не производится проверка адресов на предмет перекрытия соседних блоков. эту проверку вы должны делать сами.
Go to the top of the page
 
+Quote Post
juvf
сообщение Apr 20 2011, 04:41
Сообщение #230


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Цитата(vadimuzzz @ Apr 20 2011, 09:30) *
3-4 вызова функций HAL, что тут низкоуровневого?
да уш не 3-4. А отслежывать перекрытие блоков..... Вызовов может и 3-4, но + к этому целый алгоритм мутить по отслежованию перекрытий.


Цитата
например, у меня интеловская p30. имеет 2 региона с разными размерами блоков в первом 32кбайтные, во втором (основном) - 128 кбайтные.

спасибо, все стало понятно.

пока у меня новая проблема: alt_flash_open_dev(CFI_FLASH_0_NAME) возвращает 0. Если не правильно распинать флешку, неправильно подключить, или если её физически нет, но в ниосе есть контроллер cfi - то что вернёт alt_flash_open_dev? ноль?


ps Есть у алтеры дока "HAL API Reference". В ней говорится о функциях open(), read(), write(), close(). В частности
Цитата
The open() function opens a file or device and returns a file descriptor (a small, nonnegative
integer for use in read, write, etc.)
эта open(),,,,,,,, она работает (должна работать) с cfi flash?
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Apr 20 2011, 06:01
Сообщение #231


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(juvf @ Apr 20 2011, 11:41) *
да уш не 3-4. А отслежывать перекрытие блоков..... Вызовов может и 3-4, но + к этому целый алгоритм мутить по отслежованию перекрытий.

драйвер делает ровно то, что позволяет флешка. может, вы захотите еще и файловую систему поверх водрузить - этим тот же драйвер должен заниматься?
что вы хотите хранить на флешке, какая задача?
Цитата
пока у меня новая проблема: alt_flash_open_dev(CFI_FLASH_0_NAME) возвращает 0.

а она у вас CFI_FLASH_0_NAME называется? в system.h посмотрите.
Цитата
Если не правильно распинать флешку, неправильно подключить, или если её физически нет, но в ниосе есть контроллер cfi - то что вернёт alt_flash_open_dev? ноль?

нет. диагностировать подключение удобно при помощи nios2-flash-programmer. пускаете его с ключом --debug и смотрите, что он там пишет.

Цитата(juvf @ Apr 20 2011, 11:41) *
эта open(),,,,,,,, она работает (должна работать) с cfi flash?

не должна
Go to the top of the page
 
+Quote Post
juvf
сообщение Apr 20 2011, 08:03
Сообщение #232


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Цитата(vadimuzzz @ Apr 20 2011, 12:01) *
а она у вас CFI_FLASH_0_NAME называется? в system.h посмотрите.
У меня CFI_FLASH_NAME, соответственно вызов делаю с именем CFI_FLASH_NAME. пробовал "/dev/cfi_flash" (из тогоже систем.аш) - тозе возвращает 0

Цитата
нет. диагностировать подключение удобно при помощи nios2-flash-programmer. пускаете его с ключом --debug и смотрите, что он там пишет.

выхлоп nios2-flash-programmer на картинке. Это нормальная работа флешки?

Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Apr 20 2011, 08:10
Сообщение #233


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(juvf @ Apr 20 2011, 15:03) *
выхлоп nios2-flash-programmer на картинке. Это нормальная работа флешки?

нет, похоже проблема с подключением.
вот как примерно должно выглядеть:
CODE

Resetting and pausing target processor: OK
Found CFI table in 16 bit mode
Raw CFI query table read from device:
0: 89 00 1B 88 01 00 01 00 89 00 CF BF 01 00 01 00 ................
10: 89 00 1B 88 01 00 01 00 89 00 CF BF 01 00 01 00 ................
20: 51 00 52 00 59 00 01 00 00 00 0A 00 01 00 00 00 Q.R.Y...........
30: 00 00 00 00 00 00 17 00 20 00 85 00 95 00 08 00 ........ .......
40: 09 00 0A 00 00 00 01 00 01 00 02 00 00 00 18 00 ................
CFI query table read from device:
10: 51 52 59 01 00 0A 01 00 00 00 00 17 20 85 95 08 QRY......... ...
20: 09 0A 00 01 01 02 00 18 01 00 06 00 02 03 00 80 ................
30: 00 7E 00 00 02 00 00 00 00 FF FF FF FF FF FF FF .~..............
40: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
50: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
60: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
70: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
CFI extended table read from device:
0: 50 52 49 31 34 E6 01 00 00 01 03 00 18 90 02 80 PRI14...........
10: 00 03 03 89 00 00 00 00 00 00 10 00 04 03 04 01 ................
Read autoselect code 0089-881B (in 16 bit mode)
No CFI override data for [FLASH-0089-881B]
Target timeout loop runs 1497780 times/s
Timeout set to 767 loops
Device size is 16MByte
Erase regions are:
offset 0: 4 x 32K
offset 20000: 127 x 128K
Device supports Intel style programming algorithm
Multi-byte programming with 64 byte buffer
Sector erase timeout is 4s
Word program timeout is 512us
Buffer program timeout is 1ms
Leaving target processor paused


а какая у вас борда?
Go to the top of the page
 
+Quote Post
juvf
сообщение Apr 20 2011, 08:29
Сообщение #234


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Цитата(vadimuzzz @ Apr 20 2011, 14:10) *
а какая у вас борда?


DE0
Go to the top of the page
 
+Quote Post
Reanimator++
сообщение Apr 21 2011, 10:28
Сообщение #235


Местный
***

Группа: Свой
Сообщений: 399
Регистрация: 1-01-06
Из: Волгоград
Пользователь №: 12 763



Собственно, даже если вы напишите функции которые позволяют дописать два байта в произвольное место флеши (по принципу чтение блока, модификация блока, запись байтов), то пользоваться ими беспроблемно не получится - время записи блока у флешей может быть достаточно большим (0.1 - 0.5 секунды), так что наваливать по десятку байт скорее всего окажется накладно - придется так или иначе учитывать специфику флеши.
Go to the top of the page
 
+Quote Post
gosu-art
сообщение Apr 26 2011, 07:12
Сообщение #236


Знающий
****

Группа: Свой
Сообщений: 555
Регистрация: 14-10-09
Пользователь №: 52 939



Здравствуете! Начинаю работать с Ниос!

Создал свой компонент, прицепил к ниосу, все нормально!

Далее начинаю писать по адресу (через указатель) - тоже все работает!

А вот чтение не получается! Может подскажете как надо!?

прилагаю код компонента:
Код
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;

entity PC104 is
    port (
        ats_s0_address      : in    std_logic_vector(15 downto 0):=(others => 'Z');      
        ats_s0_read_n       : in    std_logic                     := '1';                              
        ats_s0_data         : inout std_logic_vector(15 downto 0) := (others => 'Z');
        ats_s0_chipselect_n : in    std_logic                     := '1';                          
        ats_s0_write_n      : in    std_logic                     := '1';                          
            
        clk                 : in    std_logic                     := '1';                            
        reset               : in    std_logic                     := '1';                            
        
        
        
        cos_RD_n            : out    std_logic                    := '1';  
        cos_WR_n            : out    std_logic                    := '1';
        cos_CS_n            : out    std_logic                    := '1';
    --    cos_data_ISA : inout std_logic_vector(15 downto 0) := (others => 'Z');
        cos_ADDR_ISA          : out std_logic_vector(15 downto 0) := (others => '0')
        

        
    );
end entity PC104;

architecture rtl of PC104 is
begin

    cos_RD_n<=ats_s0_read_n;
    cos_WR_n<=ats_s0_write_n;
    cos_CS_n<=ats_s0_chipselect_n;
    
    cos_ADDR_ISA<=ats_s0_address;
    
    --cos_data_ISA<=ats_s0_data when ats_s0_write_n='0' else (others => 'Z');
    --ats_s0_data<=cos_data_ISA when ats_s0_read_n='0' else (others => 'Z');

end architecture rtl; -- of new_component


И код программы:


Цитата
#include "sys/alt_stdio.h"
#include "system.h"
#include "alt_types.h"

int main()
{
alt_u16 *p=(alt_u16*) (0x20054);
alt_putstr("Hello from Nios II!\n");
alt_u16 a,b=0;

while(1)
{

a++;
*p=a;//работает

b+=5;
*p=b;//работает

a=*p;//не читает!!!

}


return 0;
}




UPD: попробовал вот так:

Цитата
while(1)
{

IOWR_16DIRECT(0x20054, 0, a);

c=IORD_16DIRECT(0x20054, 0);

}


Вроде пишет и читает, но почему при чтении происходит два обращения?

Прикрепленное изображение


Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Apr 26 2011, 12:27
Сообщение #237


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(gosu-art @ Apr 26 2011, 14:12) *
Вроде пишет и читает, но почему при чтении происходит два обращения?

возможно, занята шина. надо еще waitrequest смотреть
Go to the top of the page
 
+Quote Post
gosu-art
сообщение Apr 26 2011, 12:44
Сообщение #238


Знающий
****

Группа: Свой
Сообщений: 555
Регистрация: 14-10-09
Пользователь №: 52 939



Почитал стандарт на авалон и вот что нашел:

Цитата
If the master is wider than the slave, data bytes in the master address space map to
multiple locations in the slave address space. For example, when a 32-bit master port
performs a read transfer from a 16-bit slave port, the system interconnect fabric
executes two read transfers on the slave side on consecutive addresses, and presents
32-bits of slave data back to the master port.


У меня компонент с 16ти разрядными данными на Авалоне, точнее на тристэйте! Получается, что при записи происходит одно обращение, т.к. переменная объявлена как 16ти разрядная (объявил указатель 32х.р. пошло 2е записи). При чтении же Ниосу нужно 32 разряда, поэтому он и обращается дважды. Придется доработать компонент.
Go to the top of the page
 
+Quote Post
gosu-art
сообщение Apr 28 2011, 07:13
Сообщение #239


Знающий
****

Группа: Свой
Сообщений: 555
Регистрация: 14-10-09
Пользователь №: 52 939



Заинтересовала меня вот эта штука Remote System Upgrade. Только не догоняю, она может полностью переконфигурировать плис (СIII)? Даже если новая прошивка будет без ниоса? Или тут какие то нюансы есть?
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Apr 28 2011, 07:18
Сообщение #240


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(gosu-art @ Apr 28 2011, 14:13) *
Заинтересовала меня вот эта штука Remote System Upgrade. Только не догоняю, она может полностью переконфигурировать плис (СIII)? Даже если новая прошивка будет без ниоса? Или тут какие то нюансы есть?

да, может. ниос не обязателен, компонент в SOPC - это просто обертка к мегафункции. но с процом, конечно, удобнее
Go to the top of the page
 
+Quote Post

43 страниц V  « < 14 15 16 17 18 > » 
Reply to this topicStart new topic
4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 10th July 2025 - 18:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01517 секунд с 7
ELECTRONIX ©2004-2016