How to modify Data Rate on downlinks?

The following is the packet forwarder logging an uplink.

JSON up: {"rxpk":[{"tmst":3373830419,"chan":3,"rfch":0,"freq":904.500000,"stat":1,"modu":"LORA","datr":"SF7BW125","codr":"4/5","lsnr":10.0,"rssi":-39,"size":28,"data":"QAoKCgAAJQABfxVMDm6JF8vfuGk+4eC+yWA+wQ=="}]}

CS then invokes a response downlink, which is picked up and logged by the packet forwarder. Showing frequency 925.1 , spread factor 9 and bandwidth 500 kHz , coding rate 4/5.
If a payload were enqueued, it would appear appended to “data”

JSON down: {"txpk":{"imme":false,"rfch":0,"powe":20,"ant":0,"brd":0,"tmst":3374830419,"freq":925.1,"modu":"LORA","datr":"SF9BW500","codr":"4/5","ipol":true,"size":27,"data":"YAoKCgCP6EUDAAEAcAMwAP8BBQho4oyCHma+"}}

My US902 American devices absolutely cannot see this downlink even when they match the frequency immediately after send. Even when they switch to SF9 and BW500. My code is armed to report any errors. I have disabled CRC. My hardware and interrupts are functional as the end devices have communicated many times in the past. But for these gateway downlinks they see nothing arrive over the air.

I suspect the problem is the SF9BW500. Is there a config file where I could change the data rate SF and BW to something else?

AFAIK, the downlink for RX1 will use the same frequency and datarate as the latest uplink.
The downlink for RX2 will use the default datarate.

You can check for RX2 in the toml in /etc/chirpstack


The above is an analysis of uplink frames and the downlinks they caused. This was gleaned from packet forwarder logs. All the uplinks were SF7BW125. It is definitely not true that downlinks match the frequency and data rate of the uplink that invoked them.

This is not possible. Please refer to the Regional Parameters Specification. This document specifies which downlink DR will be used given the uplink DR, as well which downlink frequency will be used.

For US915, there are 8 downlink channels (which are different from the uplink channels). The function is (but this is also specified):

downlink channel number = uplink channel number % 8