Well I bought all the jtag stuff (that I've never used) that you could buy from ngzhang for the Icarus ... so when I get a spare day (never
) I guess I should try also
There are a few differences in the 1.2.5 source firmware.
I spent a bit of time reading through it to do the initial V2 changes in cgminer
(after Luke-Jr told me about them ... and I misunderstood what he said until I read the code
)
Firstly it tunes each chip independently - so if one is faster then the other they will run at the 2 different speeds.
In the 1.0.0 firmware this means that it runs at the speed of the slowest chip since it divides each work item up across all the chips and waits for them all to finish to queue the results for the work item.
In the 1.2.? firmware it gives a separate job to each chip. So if one chip is faster than the other, it will do more work over time since it starts the next queued work item as soon as it finishes the current one.
There is a command to set the frequency that's even in the 1.0.0 firmware - but it may be ignored in 1.0.0?
I've not tried this, but ckolivas did and found it seemed to ignore it.
The command to set the frequency is ZVX and the command to read it is ZKX
Reading the code I worked it out to actually set the frequency you need to send 5 bytes after the ZVX:
firstly 0x04 (which means 4 bytes follow - which is required) then 4 bytes of the 'coded' frequency number of which the lower 2 bytes are the number used (the other 2 bytes are ignored)
It seems to be from the table in __ASIC_FREQUENCY_WORDS
The commented out code in ASIC_Engine.c may be the actual values that might work with the standard Jalapeno, but I've not tried myself
According to commented out ASIC_Engine.c
//Set Osc Control to slowest frequency:0000 (highest=0xCD55) and
DATAIN = 0x5555; // 280MHz and a lot more comments around there.
If you read ASIC_Engine.c it makes a bit more sense and has more info
__ASIC_FREQUENCY_WORDS (in std_defs.c and std_defs.h) says:
const unsigned int __ASIC_FREQUENCY_WORDS [10] = {0x0, 0xFFFF, 0xFFFD, 0xFFF5, 0xFFD5, 0xFF55, 0xFD55, 0xF555, 0xD555, 0x5555};and
const unsigned int __ASIC_FREQUENCY_VALUES[10] = {189, 233, 240, 246, 253, 260, 266, 274, 283, 291}; // TO BE DETERMINEDIf anyone manages to get these doing anything let me know
On linux, in cgminer there is a usbtest.py in the folder that you can send commands and see the replies.
You must stop cgminer (or disable hotplug with
java API 'hotplug|0')
then unplug the Jalapeno and plug it back in and it will have a /dev/ttyUSBx
Then it would be something like e.g.
./usbtest.py /dev/ttyUSB0 0x5A56580455550000 would try to set it to 280MHz
If anyone plays with this and actually gets it to work let me know!
If I get around to trying and get any results I'll report back.