|
23k256, как использовать эту ram |
|
|
|
Apr 6 2015, 07:20
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 12-03-15
Пользователь №: 85 618

|
не могу понять как считывать и записывать данные в эту озу. даташит читаю - и ни х. не понимаю. Если не тяжело растолкуйте. пытаюсь так: send data 2; while(усл); send data adr; //0 while (усл); send data data; while (flag); вообще не могу догнать правильно или нет,блуждаю как ежик в тумане.
|
|
|
|
|
Apr 7 2015, 04:52
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 12-03-15
Пользователь №: 85 618

|
хорошо,попробую.Непонятно, если я запишу 10 байт, то как их считать?В даташите написано: команда 3;2 байта адр;и дальше читаем данные.Как читаются данные - непонятен принцип действия.Вроде мастер должен чтото запихивать чтобы чтото получить от РАМки?
|
|
|
|
|
Apr 7 2015, 06:07
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Цитата(jukebox @ Apr 7 2015, 09:52)  хорошо,попробую.Непонятно, если я запишу 10 байт, то как их считать?В даташите написано: команда 3;2 байта адр;и дальше читаем данные.Как читаются данные - непонятен принцип действия.Вроде мастер должен чтото запихивать чтобы чтото получить от РАМки? общий алгоритм такой Код void Write(uint32_t address, uint32_t lenght, uint8_t *buffer) { // Note!!!Every write operation demands a write enable!!! //SPI_CSlow(); //SPI_SendByte(SPIEEPROM_CMD_WREN); //SPI_CShigh();
// start write SPI_CSlow(); // send write command SPI_SendByte(SPIEEPROM_CMD_WRITE); // send address SPI_SendByte(address>>8); SPI_SendByte(address&0x00FF); while(lenght--) { // send data to be written SPI_SendByte(*buffer++); } // stop write SPI_CShigh(); }
void Read(uint32_t address, uint32_t lenght, uint8_t *buffer) { if(lenght>PAGE_SIZE) return 0; uint32_t data; // start read SPI_CSlow(); // send command SPI_SendByte(SPIEEPROM_CMD_READ); // send address SPI_SendByte(address>>8); SPI_SendByte(address&0x00FF); // read contents of memory address while(lenght--) { data = SPI_TransferByte(0x00); *buffer++ = data; } // stop read SPI_CShigh(); }
|
|
|
|
|
Apr 7 2015, 08:51
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 12-03-15
Пользователь №: 85 618

|
не получается,чтото упускаю.Пишу на кокосе,там таких функций нет.Мне нужно понять порядок действий. пишу так, упрощенно : spi1->DR=1; //write status reg while (flag); ...=0x41; // hold off,max size data //-----
...=2; // write wh(); ...=0; //adr wh(); ...=0; //adr wh(); ...= data; wh(); //---- ...=3; //read wh(); ...=0; // adr wh(); ...=0; // adr wh(); data = spi1->DR;
|
|
|
|
|
Apr 7 2015, 09:52
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 12-03-15
Пользователь №: 85 618

|
Цитата(Herz @ Apr 7 2015, 09:25)  Неужели? А что такое "кокос? Орех такой? Если имеется в виду движок Cocos, так он, вроде, базируется на С++, нет? Да кокос он и среди орехов CooCox.Других кокосов в stm32 нету. Лучше помогите понять алгоритм действий.
|
|
|
|
|
Apr 12 2015, 06:35
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 12-03-15
Пользователь №: 85 618

|
Цитата(esaulenka @ Apr 10 2015, 09:35)  Не надо "писать на кокосе". Надо по-человечески, отделяя мух от котлет. Эх, любите вы умники к мелочам придираться.Да, правильно написать В СооСох-е. А озу как уперлась так и продолжает сопротивляться. С передачей данных из модуля spi проблем нет, данные уходят.Вот только не приходят из озу.Ножки входа и выходов настроены. Надо чтото попроще погонять, датчики наверное.Там опыта наберусь, осилю и озу.
|
|
|
|
|
Apr 13 2015, 05:57
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 12-03-15
Пользователь №: 85 618

|
Цитата(jcxz @ Apr 12 2015, 15:32)  Что такое "сигнал CS" знаете?  Что такое чип селект я знаю, как он относится к озу я знаю. Если можете, подскажите что делать с выводом HOLD для нормальной работы, и как правильно настроить регистр конфигурации в озу.
|
|
|
|
|
Apr 14 2015, 08:39
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 12-03-15
Пользователь №: 85 618

|
Ааа.Эта полный трэшшшщь.Уже и сниффер сваял для проверки линий, и статей перечитал и осталось шаг за шагом вычистить ошибки ... и плата дискавери здохла.Ну надо ж такое. Всем кто реально помогал спасибо человеческое.Буду думать что дальше делать.
|
|
|
|
|
Apr 14 2015, 18:59
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 12-03-15
Пользователь №: 85 618

|
Осцилограф есть эл-лучевой ещё советский или около того, как им смотреть протокол - без понятия, уровни меняются сигналы какието проходят,но развертки линий во времени просмотреть нереально.Програмно собирался сделать, если через модуль ничего не будет получаться.Как получить развертку на компе - не нашел подходящих вариантов.Есть анализатор для LPT порта от Валерия Ковтуна, но у меня сигналы на развертке рисовались искаженными, а то и вовсе не фиксировались.Вроде он подходит для медленных процессов. Насчет CS, если вариант hard, то со шлейфом 20 см spi зависает намертво в первом же цикле ожидания опустошения флага.В начале отправки данных, перед строкой с send data включаю синяка(PC8), и по окончанию while (flag) выключаю его.Если провода на CS выводе нет, то синяк выдает едва заметный блик, правда DIV_128, если провод подцепить синяк светит ярко. Вместо CS(оставил висеть в воздухе) задействовал соседний PC4 с соотв уровнями 0 и 1 когда надо.Со шлейфом так spi не виснет и данные выдаются.Со сниффером успел проверить линию CLK,счетчик четко фиксирует приход 8 импульов, или 16 если перем data объявил 16 битной.Также через rlf на др входе и прер по нужным фронтам от CLK собрался проверить что передается по линиям mosi и miso, но плата накрылась.В идеале было бы хорошо смотреть развертку линий на компе и иметь программу симуляторов протоколов с возможностью взаимодействовать с контроллерами, но эта фонтастик.Вот такие пироги.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|