[an error occurred while processing this directive]
|
Пишу софтину для работы с DS1996 для писюка.
Использую далласовский драйвер TMEX и даллосовский же адаптер DS9097U.
Странно работает запись в Scratchpad DS1996: выдается end offset на 3-4 байта меньше, чем было выдано данных, хотя при чтении видно, что данные в Scratchpad записались верно.
Пробовал обращаться и по одному байту и с блочным обменом.
Пример тестовой программы:
...
unsigned short Tmpa, Temp2;
unsigned short Tsz;
u8 CmBuf[5+32];
const u8 CmWrScp[2]={ 0xcc, 0x0f };
const u8 CmRdScp[2]={ 0xcc, 0xaa };
const u8 CmCpScp[2]={ 0xcc, 0x55 };
/* проверяем наличие DS1996 */
Result = TMStrongAccess(SessionHandle, StateBuffer);
if (Result !=1)
return false; /* ds1996 не обнаружена */
Result = TMTouchReset(SessionHandle);
if (Result !=1)
return false;/* пишем */
memcpy((void *)CmBuf, (void *)CmWrScp, 2);
CmBuf[2]=*Addr & 255;
CmBuf[3]=(*Addr >> 8) & 255;
Tsz=16; // количество записываемых байт/* формируем тестовую последовательность */
for (Temp2=0; Temp2 < 32; Temp2++)
{
CmBuf[4+Temp2]=Temp2+0x10;
}
// выдаем
Tmpa=TMBlockIO(SessionHandle, CmBuf,4+Tsz);
if (Tmpa <0)
{
*LogWindow << "\nerror!";
}/* сброс ds1996 */
Result = TMTouchReset(SessionHandle);
if (Result !=1)
return false;memset((void *)CmBuf, 255, 5+32); // очистка приемника
memcpy((void *)CmBuf, (void *)CmRdScp, 2);
CmBuf[2]=*Addr & 255;
CmBuf[3]=(*Addr >> 8) & 255;
Tmpa=TMBlockIO(SessionHandle, CmBuf, 5+Tsz);
if (CmBuf[4] != Tsz)
return false;
...
One Wire Viever работает четко через тот же адаптер.
E-mail: info@telesys.ru