Romashki
Sep 19 2011, 14:24
куда поделиться?
Она вообщето есть в C:\SIM900DevIDE\EmbatSIM\gsmos\coreSW\rvctcore\
Цитата(Romashki @ Sep 19 2011, 21:24)

куда поделиться?
Она вообщето есть в C:\SIM900DevIDE\EmbatSIM\gsmos\coreSW\rvctcore\
Либо по почте ap<сбк>li.ru, либо по фтп. Там правда 32мега, почтовый ящик наверно не выдержит.
У меня предыдущее ядро.
Цитата(Romashki @ Sep 19 2011, 21:24)

куда поделиться?
Она вообщето есть в C:\SIM900DevIDE\EmbatSIM\gsmos\coreSW\rvctcore\
Спасибо! *.cla пришел.
Правда скомпилировать тест без остальных файлов не получится.
CADiLO
Sep 20 2011, 06:13
Спасибо!! Большой респект Romashki и CADiLO! Наши украинские коллеги гораздо внимательнее моего поставщика
west329_
Oct 11 2011, 16:58
Подскажите пожалуйста где можно скачать сам АРМ компилятор ?
Сам RVCT собственно.
west329_
Dec 24 2011, 16:34
Кто может поделится
Код
1137B03V01SIM900M64_ST_EAT
?
Есть в наличии
Код
C:\SIM900DevIDE\EmbatSIM\gsmos\coreSW\1137B01V02SIM900M64_ST_EAT.cla
она сильно отличается от новой ?? можно её зашивать ?
а также нашол ещё
Код
1137B01V02SIM900M64_ST_EAT.cla
1137B01SIM900M64_ST_EMBEDDEDAT.cla
и ещё
Код
1137B01V03SIM900M64_ST_EAT_FOR_TEST_20110307.cla
Вот ещё вылезла интересная ошибка
west329_
Dec 26 2011, 08:05
Кто то сталкивался с такой проблемой ?. Погуглил доки на чип что у меня стоит перед чипом СИМ900 - st3232 у него заявленная скорость до 250кб, выставил в настойках зашивальщика скорость 115200, всеравно выскакивет ошибка, поставил даже 9600 одинаково. Пробовал прошивать через переходник ЮСб-232, аналогично выскакивает ошибка ERROR BaudeRate change error! (1200)
CADiLO
Dec 26 2011, 08:08
1137B03V01SIM900M64_ST_EAT - входит в состав IDE 108
1137B01 - первая версия, после нее и прерывания исправлены были и еще некоторые вещи.
вобщем так:
http://www.microchip.ua/temp/NG.RAR - IDE+компилятор, рабочий комплект 38 мег
кто до 30 декабря не успеет - я не виноват.
west329_
Dec 26 2011, 08:15
РЕСПЕКТ

спасибо за подрки

ГАММА forever
west329_
Dec 26 2011, 11:22
Поставил новый компилятор. Все собирается отлично.
version1 не забываем править.
Вопрос по поводу заливки прошивки остался открытый вопрос. Софт отказывается заливатся через загрузчик. Куда рыть даже не догадываюсь. Пробовал из под ВинХп пишет тоже самое.
Схемотехнически распаял обычный мост на MAX3232 между SIM900 и PC, в линиях ТХ RХ стоят резисторы на 100 ом.
Все больше ничего не напаивал.
Как зашиваю. Включаю программу, выбираю ядро и приложение нажимаю СТАРТ ЗАГРУЗКИ, и зажимаю ПОВКЕЙ кратковременно, как бы начинается процесс загрузки, но после 4х пунктов вываливается с ошибкой.
west329_
Dec 26 2011, 14:41
Цитата
Такой вопрос. А обновлять прошивку случайно нужно не через ДЕБАГ порт ???
В общем можно та и так без разницы.
CADiLO
Dec 27 2011, 07:14
>>>нажимаю СТАРТ ЗАГРУЗКИ, и зажимаю ПОВКЕЙ кратковременно
поверкей коротим на землю - до конца загрузки
нажимаем старт
и только потом подаем питание.
Цырен.
Jan 11 2012, 06:47
Есть новость. В EAT для SIM900 добавили две важные функции DTMF декодирование и Jumming Detection. Пока реализованы в бета версии прошивки. Спрашивайте ее у ваших дистрибюторов.
Кстати, в параллельной ветке уже писал - в SIM908(GSM+GPS) тоже теперь есть EAT с DTMF и JD.
SERG33
Mar 22 2012, 10:11
Подскажите пожалуйста где можно скачать сам АРМ компилятор ?
Сам RVCT собственно.
CADiLO
Mar 22 2012, 10:36
Неужели так трудно написать письмо региональному официальному дистрибьютору, ответить на пару вопросов и получить программу ?
Romashki
May 3 2012, 18:26
Подскажите по SPI в SIM900 c EAT. Не могу подружить SIM900 с SST25VF016B. Выводы подключены к ногам 11,12,13,14 модуля.
Настройки модуля ebdat5_01SpiConfigure(SSI_4WIRE, SSI_ACTIVE_LOW, FL_PIN_14, SSI_SYSTEM_DIV_2, SSI_FALLING_EDGE, SSI_MSBFIRST);
Не получается даже тип SST25VF016B считать. Вот функция:
void select_end_mem(void)
{
u8 bfur[4],i;
u32 end_of_mem=0;
#ifdef VS_DEBUG
u8 buff_for_sms[]="End of memory 0x0FFFFF";//22(17)
#endif
ebdat5_02SpiWriteByte(0x9F);
for(i=0;i<3;i++)bfur[i]=ebdat5_03SpiReadByte();
if(bfur[2]==0x41)end_of_mem=0x1FFFFF;
else if(bfur[1]==0x4A)end_of_mem=0x3FFFFF;
else end_of_mem=0;
#ifdef VS_DEBUG
if(end_of_mem==0x1FFFFF)buff_for_sms[16]='1';
else if(end_of_mem==0x3FFFFF)buff_for_sms[16]='3';
else {buff_for_sms[17]='0';buff_for_sms[18]='0';buff_for_sms[19]='0';
buff_for_sms[20]='0';buff_for_sms[21]='0';}
ebdat7_01DebugTrace((const char*)"\r\n");
ebdat7_02DebugUartSend(buff_for_sms, 22);
ebdat7_01DebugTrace((const char*)"\r\n");
#endif
}
В порт выдает End of memory 0x000000
Примерно понимаю, что что-то не так с ногой CHIP SELECT, поскольку функции ebdat5_02SpiWriteByte и ebdat5_03SpiReadByte её дергают постоянно, а нужно только перед ebdat5_02SpiWriteByte и после третьего ebdat5_03SpiReadByte. Но как это сделать - не знаю. Может кто подскажет? Или товарищи из SIMCOMa подскажут....
Цитата(CADiLO @ Mar 22 2012, 14:36)

Неужели так трудно написать письмо региональному официальному дистрибьютору, ответить на пару вопросов и получить программу ?
Такой раздельный вызов функций Write и Read естественно, приводит к тому, что по окончанию записи или чтения байта CS будет снят, что недопустимо для вашего протокола.
Обычно SPI трехпооводный и одновременно отправляет и читает байт. Я не знаком с реализацией SPI в EAT, но в OCPU софтово реализовна функция, которая пишет и одновременно читает заданное количество байт. Т.о. пишем три байта (первый - команда, остальные - неважно), одновременно читаем тоже три (первый - неважно, остальные два - ответ).
Romashki
May 11 2012, 16:11
Эдуард, может Вы подскажете, как это побороть?
Очень благодарен буду.
Цырен.
May 12 2012, 11:25
Цитата(Romashki @ May 11 2012, 20:11)

Эдуард, может Вы подскажете, как это побороть?
Очень благодарен буду.
А если так?
u8 Buf[4] = {0x9F,0x00,0x00,0x00};
for(i=0;i<4;i++)
{
ebdat5_02SpiWriteByte(Buf[i]); - шлем
Buf[i] = ebdat5_03SpiReadByte(); - читаем
}
Как вариант - возьмите осцил и подключитесь в MOSI, MISO и CLK. Посмотрите есть ли клоки при ebdat5_03SpiReadByte() и данные от слэйва по линии MISO.
Romashki
May 12 2012, 13:06
Дело в том что SIM900 после каждой команды ebdat5_02SpiWriteByte убирает сигнал CS, а SST такого не понимает. Т.е. идеально было бы, чтоб пользователь мог говорить например ebdat5_02SpiWriteByte(Buf[i], 1); - это значит активировать CS, а ebdat5_02SpiWriteByte(Buf[i], 0); - деактивировать. И на чтение - также.
Тогда бы все наверное получилось бы:
ebdat5_02SpiWriteByte(0x9F,1); - шлем
for(i=0;i<4;i++)
{
if(i<3)Buf[i] = ebdat5_03SpiReadByte(1); - читаем
else Buf[i] = ebdat5_03SpiReadByte(0); - читаем
}
Идеально было бы китайцам донести необходимость команды SpiWriteBuffer(char* cmdbuf, char* ansbuf, int len).
А реализованная SpiWriteByte по большому счету вообще бесполезна.
PS: альтернативой есть написать самому даную функцию (абсолютно ничего сложного), используя стандартные функции управления ножками модуля. Конечно, будет на порядок медленней обмен, но хоть как...
Romashki
May 13 2012, 08:42
Цитата(GeGeL @ May 13 2012, 08:20)

PS: альтернативой есть написать самому даную функцию (абсолютно ничего сложного), используя стандартные функции управления ножками модуля. Конечно, будет на порядок медленней обмен, но хоть как...
Пытаюсь это сделать....знать бы сколько выполняется команда по установке ноги в 1 или 0 ... или это нельзя определить?
Можно: засеките системное время, затем в цикле дерните ногу туда-сюда раз тысячу, затем снова время.
Кутел так делает в некоторых своих примерах для демонстрации преимуществ использования API-функций перед АТ-командами.
Напишите потом результат, интересно...
Romashki
May 13 2012, 16:10
системным временем не получилось (там секунды наименьшее значение), сделал тиками. Один тик = 9,23 миллисекунды.
На 1000 не меняется, пришлось 10000 поставить:
SysTick1 = ebdat8_08GetSystemTickCounter( );
for(tm=0;tm<10000;tm++)
{
if(ebdat6_04WriteGpio(EEPROM_SELECT,s)==FL_OK)tms++;
s=(~s);
}
SysTick2 = ebdat8_08GetSystemTickCounter( );
ebdat7_01DebugTrace("\r\nsystem time is : %d",SysTick1);
ebdat7_01DebugTrace("\r\nsystem time is : %d",SysTick2);
ebdat7_01DebugTrace("\r\ncounter is : %d",tms);
Вот ответ:
system time is : 774[0D][0A]
system time is : 778[0D][0A]
counter is : 5000
Ориентировочно один раз проходит примерно за 4 микросекунды.... но вот почему счетчик правильных ответов ровно в половину меньше???
Может, функция управления пинами unblocked?
Для гарантии попробуйте дергать в 0 и затем в 1 отдельными командами и считать в отдельные счетчики: посмотрим, только ли фронт или спад сбоят, или же оба.
Затем введите две задержки в 2-4 мкс между дерганьями и посмотрите результат.
В любом случае, даже если выйдете на 10 мкс периода тактового сигнала, то это вполне приемлемый результат.
Romashki
Aug 16 2012, 07:47
Вроде бы получилось написать свои функции SPI....но пришлось использовать комбинации, которые Симком запрещает.....ну...пока деваться некуда....
это функции типа while(ebdat6_04WriteGpio(EEPROM_SELECT,0)!=FL_OK);
Функции, которые получились:
bool eeprom_ready(void)
{
u8 tmg;
while(ebdat6_04WriteGpio(EEPROM_SELECT,0)!=FL_OK);
send_byte(0x05);
tmg=read_byte();
while(ebdat6_04WriteGpio(EEPROM_SELECT,1)!=FL_OK);
if((tmg&0x01) || !(tmg&0x02))return 0;
else return 1;
}
u8 read_byte(void)
{
u8 a,dats=0;
bool mBits;
for(a=0;a<8;a++)
{
while(ebdat6_04WriteGpio(EEPROM_CLK, 1)!=FL_OK);
dats<<=1;
while(ebdat6_05ReadGpio(EEPROM_DI,&mBits)!=FL_OK);
if(mBits)dats|=1;
while(ebdat6_04WriteGpio(EEPROM_CLK, 0)!=FL_OK);
}
return dats;
}
void send_byte(u8 bt)
{
u8 i;
for(i=0;i<8;i++)
{
if(bt&0x80)while(ebdat6_04WriteGpio(EEPROM_DO,1)!=FL_OK);
else while(ebdat6_04WriteGpio(EEPROM_DO,0)!=FL_OK);
while(ebdat6_04WriteGpio(EEPROM_CLK, 1)!=FL_OK);
bt<<=1;
while(ebdat6_04WriteGpio(EEPROM_CLK, 0)!=FL_OK);
}
}
//******************************************************************
void write_ext_eeprom (u32 address,u16 count,u8 *bfur)
{
u16 i;
init_ext_eeprom();
while(ebdat6_04WriteGpio(EEPROM_SELECT,0)!=FL_OK);
send_byte(0xAD);
send_byte(address>>16);
send_byte(address>>8);
send_byte(address);
send_byte(bfur[0]); /* send 1st byte to be programmed */
send_byte(bfur[1]); /* send 2nd byte to be programmed */
while(ebdat6_04WriteGpio(EEPROM_SELECT,1)!=FL_OK);
for(i=2;i<count;i+=2)
{
ebdat05_09delay(10);//microseconds
while(ebdat6_04WriteGpio(EEPROM_SELECT,0)!=FL_OK);
send_byte(0xAD);
send_byte(bfur[i]); /* send 1st byte to be programmed */
send_byte(bfur[i+1]);
while(ebdat6_04WriteGpio(EEPROM_SELECT,1)!=FL_OK);
}
ebdat05_09delay(10);//microseconds
while(ebdat6_04WriteGpio(EEPROM_SELECT,0)!=FL_OK); /* enable device */
send_byte(0x04); /* send WRDI command */
while(ebdat6_04WriteGpio(EEPROM_SELECT,1)!=FL_OK); /* disable device */
ebdat05_09delay(10);//microseconds
eeprom_ready();
init_ext_eeprom();
}
//******************************************************************
void read_ext_eeprom(u32 address,u16 count,u8 *bfur)
{
u16 i;
while(ebdat6_04WriteGpio(EEPROM_SELECT,0)!=FL_OK);
send_byte(0x03);
send_byte(address>>16);
send_byte(address>>8);
send_byte(address);
for(i=0;i<count;i++)bfur[i]=read_byte();
while(ebdat6_04WriteGpio(EEPROM_SELECT,1)!=FL_OK);
}
//******************************************************************
Можно даже без ebdat05_09delay(10);
Вот и мне пришлось вплотную использовать SPI начал на 25LC160 16K SPI™ Bus Serial EEPROM
пришла в голову мысль использовать функции SPI из EAT, а под ChipSelect использовать GPIO11, все отлично работает.
Появилась необходимость использовать АЦП adc084s021 SPI 4-chanel 8-bit, но там необходимо писать и читать одновременно после 4-го SLK, и стандартные функции ЕАТ уже не катят, как с EEPROM (там все просто начала запись потом чтение).
Пришлось написать свои функции на основе предидущего сообщения.
Было бы хорошо иметь совмещенную во времени функцию SpiWriteReadByte() ,чтоб писала и читала одновременно (такой пользовались на Siemens TC-65).
Так как нет фунции SpiUnsubscribe() "освободить ноги", то пришлось делать две SPI-шины одна для SPI-аппаратная, вторая SPI-программная.
Пример с использованием альтернативнго SC.
void WR_SPI_D(u16 addr, u8 data_SPI) /*WRITE BYTE 25LC160 SC->GPIO11*/
{
/*Set the write enable latch (enable write operations)*/
ebdat6_04WriteGpio(FL_PIN_67, 0);
ebdat5_02SpiWriteByte(0x06);
ebdat6_04WriteGpio(FL_PIN_67, 1);
ebdat6_04WriteGpio(FL_PIN_67, 0);
ebdat5_02SpiWriteByte(0x02);
ebdat5_02SpiWriteByte(addr>>8);
ebdat5_02SpiWriteByte(addr & 0xFF);
ebdat5_02SpiWriteByte(data_SPI);
ebdat6_04WriteGpio(FL_PIN_67, 1);
}
/*-----------------------------------------------------------*/
u8 RD_SPI_D(u16 addr) /*READ BYTE 25LC160 SC->GPIO11*/
{
u8 data_r=0;
ebdat6_04WriteGpio(FL_PIN_67, 0);
ebdat5_02SpiWriteByte(0x03);
ebdat5_02SpiWriteByte(addr>>8);
ebdat5_02SpiWriteByte(addr & 0xFF);
data_r = ebdat5_03SpiReadByte();
ebdat6_04WriteGpio(FL_PIN_67, 1);
return data_r;
}
/*-----------------------------------------------------------*/
void WR_SPI_SR( u8 data_SPI) /*WRITE STATUS REGISTER 25LC160 SC->GPIO11*/
{
/*Set the write enable latch (enable write operations)*/
ebdat6_04WriteGpio(FL_PIN_67, 0);
ebdat5_02SpiWriteByte(0x06);
ebdat6_04WriteGpio(FL_PIN_67, 1);
ebdat6_04WriteGpio(FL_PIN_67, 0);
ebdat5_02SpiWriteByte(0x01);
ebdat5_02SpiWriteByte(data_SPI);
ebdat6_04WriteGpio(FL_PIN_67, 1);
}
/*-----------------------------------------------------------*/
u8 RD_SPI_SR(u16 addr) /*READ STATUS REGISTER 25LC160 SC->GPIO11*/
{
u8 data_r=0;
ebdat6_04WriteGpio(FL_PIN_67, 0);
ebdat5_02SpiWriteByte(0x05);
data_r = ebdat5_03SpiReadByte();
ebdat6_04WriteGpio(FL_PIN_67, 1);
return data_r;
}
/*-----------------------------------------------------------*/
/* Initialization SPI*/
ebdat5_01SpiConfigure( SSI_4WIRE, SSI_ACTIVE_LOW, FL_PIN_14, SSI_SYSTEM_DIV_512, SSI_FALLING_EDGE, SSI_MSBFIRST);
if (ebdat6_08pinConfigureToUnused(FL_PIN_67) == FL_OK)
if (ebdat6_02GpioSubscribe(FL_PIN_67,FL_GPIO_OUTPUT,1) == FL_OK)
ebdat7_01DebugTrace("INIT PIN_67 OK \r\n");
Уже писал в какой то ветке: вариантов SPI множество и абсолютно нецелесообразно вводить в EAT готовые функции. Гораздо лучше было бы иметь возможность физического доступа к ножкам, чтобы не использовать функции типа ebdat6_04WriteGpio, а непосредственно писать-читать пины. Тогда можно было бы делать быстрые реализации SPI на свой вкус, а по желанию даже использовать asm-вставки.
Romashki
Oct 2 2012, 15:55
Может кто сталкивался с приемом смс в ЕАТ. Отсылаю 6 символов латиницей - получаю, открываю ( ищу в строке комбинацию UNREAD\",\"), считываю в буфер номер телефона и текст смс, а вот когда отправляю около 60ти символов на русском комбинацию UNREAD\",\" вообще не находит и выдает обрывок окончания смс (выходит из прерывания по default). Такое чувство что модем длину выдает полученных данных (flEventBuffer.eventData.modemdata_evt.length), а сам буфер еще не заполняет (flEventBuffer.eventData.modemdata_evt.data)..... Может кто поборол эту проблему.....
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.