We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Cross-posting from the 8052.com forum http://www.8052.com/forum/index.phtml A while back (http://www.8052.com/forum/read.phtml?id=23083), I asked about how to get a PC to read the 9th bit in Mode 2/3: Multiprocessor Serial bus format. I need to be able to detect the state of the 9th bit for each received byte. Mahmood Elnasser suggested the cport library: http://www2.arnes.si/~sopecrni/downloads/CPort263.zip I've downloaded this, and it doesn't look like it'll do the job :-( (It looks like it'll have the same problem as AsyncPro) The OnRxChar Event could return any number of characters, but the LastErrors Method - as its name suggests - only tells me what the last error was; ie, I can't tell which of the received bytes had the 9th bit set (Parity error). Any help would be greatly appreciated. I'm currently looking around at direct IO drivers for Windows (yes, I know it'd be a doddle in MS-DOS).
Anyway, back to the subject: Actually doing it in the UART is easy: just set it to 8 data bits plus Parity, and the UART sees the 9th bit as a Parity bit. Thence one can easily deduce the value of bit-9. There's plenty of 'C' code on the internet showing how to hack into the UART registers to do this. The problem is how to do it from 32-bit Windows! :-( The trouble is that the Win32 API, and things like AsyncPro, don't let you read individual bytes from the UART and check the status for each byte: they just give you a few bytes and say "there was a parity error somewhere in this lot" - which is obviously no good at all! :-(
Look at http://www.wcscnet.com. They deal with the 9'th bit.
Thanks Jon Their COMM-DRV.VxD page does indeed mention "With one call the first byte is sent with 9 bits while the others are transmitted normally." http://www.wcscnet.com/CdrvVBro.htm But this is not quite what I want: I need all bytes transmitted with 9 bits, and b9 is set for "special" bytes and clear for "normal" bytes: From the bus Master, b9 set indicates an address byte (at the start of a message); From a Slave, b9 set marks the last byte of a response. Have you actually used any of their products? What was your opinion?
I had to support some multiport UARTS several years ago (before the 9 bit support was added). I used the LIB product. It worked flawlessly, and was well documented. With a little work, I am thinking you might be able to translate the 9'th bit as address to a 9'th bit as end of packet indicator. Definitely worth a Email to ask them.
Yes, they say it has a "StoreAll" mode in which data & status are queued together It certainly looks worth a try!