Fresh Roast SR700 Communication Protocol

All of the communication between the SR700 and the computer are actually happening over serial. The device contains a USB to Serial adapter that uses the WCH CH341 chipset. With this it creates a virtual serial port that the program and roaster communicate over. Each of them send 14 byte packets back and forth between each other. All of the information below was found by sniffing the communications between the roaster and the program on the serial port. This was done in attempt to provide a reference point to create a better SR700 interface and to improve the capabilities of the SR700 when a computer is attached. Looking at the protocol between two it is possible to have a computer act at a temperature controller. Rather then just using the predetermined Low, Medium, and High heat settings. With that below is the basic packet structure of the serial communications between the devices.

Packet Header ID Field? Flags Control Fan Speed Timer Heat Control Current Temperature Footer
2 bytes 2 bytes 1 byte 2 bytes 1 byte 1 byte 1 byte 2 bytes 2 bytes

An example Packet would be like below

Packet Header ID Field? Flags Control Fan Speed Timer Heat Control Current Temperature Footer
AA AA 61 74 63 02 01 01 32 01 00 00 AA FA

Packet fields

Below I'll describe each field and how they are used.

Packet Header (2 bytes)

This field is 2 bytes and almost always AA AA. The one exception to this is that when you're initializing the communications the with the roaster the computer sends AA 55.

ID Field? (2 bytes)

The next 2 bytes I do not know what they do. Every single communication they were always 61 74. I'm assuming it's some kind of ID field but could be completely wrong.

Flags (1 byte)

This field of the packet can be used to differentiate between whether the roaster or the computer sent the packet and a few other things. below are the possible values that can be in the field and what they mean.

63 - This value means the packet was sent from the computer

00 - The packet was sent by the roaster

The above will give you some insight on whose sending the packet. Although there are other values that could be in these field that won't give you that insight. The following values are used in this field when a recipe sequence is being communicated between the roaster and the computer.

AA - Programming sequence line with more in the sequence to follow

AF - Last line in a Program's sequence

A0 - Sent by the roaster to tell the current manual mode settings on the roaster

Control (2 bytes)

This section is the part of the packet that control the start and stop of the roaster. There are many options that can be passed with this field. Below is the list of them along with what they trigger.

02 01 - Pre-roast idle (Shows current timer and fan speed values)

04 02 - Roast

04 04 - Cooling Process

08 01 - Stops roast / Makes roaster sleep (Displays "-" in both fan speed and timer fields on the roaster)

Fan Speed (1 byte)

This field is actually quite self explanatory. It just the fan speed in hex. Below are the possible values you can pass it.

01,02,03,04,05,06,07,08, or 09

Timer (1 byte)

This field is also very simple. It's just the current timer reading in hex. for example 1 and a half minutes would be translate to 1.5 or 15. This is then translated into hex as 0F. Another example be that 5.9 minutes (5 minutes and 54 seconds) would be 3B in hex.

Heat Control (1 byte)

This field is just the heat setting for the roaster at that time. The values are also easily interpreted as the following.

00 - No Heat (Cooling)

01 - Low Heat

02 - Medium Heat

03 - High Heat

Temperature (2 bytes)

This field is just the temperature inside the roaster encoded in hex. When the roaster doesn't read a temperature of 150°F or higher it sends the following hex FF 00. When is does read a temperature it's simply that temperature encoded in hex. For example 352°F is 01 60.

This field to always seems be the following AA FA. It simply the field that signifies the end of the transmission.

Packet Sequences

Being able dissect a packet is enough interpret the communications but if you're wanting to communicate yourself you will need to know in which order to send the packets and when to send packets. In this section I'll describe exactly that.

To start off every communication between the roaster and the computer is initiated by the computer. It is initiated with a packet that looks like the below packet.

AA 55 61 74 63 00 00 00 00 00 00 00 AA FA

This packet is simply a blank packet with a 55 in the second byte of the packet. This then signals the roaster to send back it's current configuration on the roaster. This configuration will consist of the USB downloaded recipe and the current manual setting on the roaster. Below is an example of the data that roaster would send back.

AA AA 61 74 A0 00 00 09 3B 02 00 00 AA FA <-- Manual setting currently on the roaster

AA AA 61 74 AA 00 00 09 03 03 00 00 AA FA <-- First line of the USB program currently on the device

AA AA 61 74 AA 00 00 09 01 02 00 00 AA FA <-- Second line of the USB program currently on the device

AA AA 61 74 AF 00 00 09 1C 00 00 00 AA FA <-- Last line of the USB program currently on the device which in this case is the cooling cycle

It sends the above packets all one right after another. It doesn't wait for the computer to respond, until after the last line of sequence is sent. The last packet that's sent is donoted by the AF as the fifth byte in the packet.

After this computer sends back the heat, fan speed, and time settings it wants the roaster to be set to. This is all sent in a single packet like the following.

AA AA 61 74 63 02 01 01 3B 01 00 00 AA FA <-- heat=low, fan speed=1, time=5.9 minutes

The roaster then sends back the current settings. Basically confirming the change of settings and the current temperature of the roaster if it's 150°F or higher. The response paket for the above packet would most like be the following.

AA AA 61 74 00 02 01 01 32 01 FF 00 AA FA

You should be able to interpret the above packet with the above section. Although it's pretty much the same as the sent packet above except the 63 in the 5th byte is switched to 00. The other change is the 2 byte temperature field is now FF 00 which means the current temperature is below 150°F.

This sequence of the computer sending a packet with the current settings and the roaster confirming those setting with the addition of the temperature is continually sent. Nothing will happen on the roaster until the 6th and 7th bytes in the packet change. From the examples above the 6th and 7th byte are 02 01 which means that roaster is just in an idle mode.

To actually start roasting you will continue with the above sequence of packets except the 6th and 7th byte will change to 04 02. This means that's entering into a roasting mode. You continue changing the fan speed, heat, and the timer fields according to your roast settings.

When you're ready to start cooling just switch the 6th and 7th byte to 04 04.

When it's done just finish by changing the 6th and 7th byte to 08 01.

Drivers

Windows & Linux

The drivers should work out of the box. If you have problems you can always the source from the official site here: http://www.wch.cn/downloads.php?name=pro&proid=5

Mac OSX

Download latest driver from the official site here: http://www.wch.cn/downloads.php?name=pro&proid=5

Install these drivers. If you're running OSX Yosemite you will have to issue the following command.

sudo nvram boot-args="kext-dev-mode=1"

Then reboot.